我的公司使用虛擬機作爲我們的網絡/應用程序服務器。如果出現問題,這可以非常容易地回滾部署。但是,如果應用程序服務器部署還需要數據庫部署,並且我們必須回滾,否則我有點茫然。如何在不丟失數據的情況下回滾數據庫模式更改?我能想到的唯一的事情就是編寫一個腳本,將腳本放回/恢復到原始狀態。這真的是最好的方法嗎?如何在不丟失新數據的情況下回滾數據庫部署?
0
A
回答
1
一般來說,你不能這樣做。
但是,假設這種回滾有意義,這意味着您試圖保留的數據與您希望恢復的模式更改無關。對付它
一種方法是:
- 只備份數據(腳本),
- 恢復模式以舊的和
- 恢復數據
如果模式更改不會使創建的腳本無效(例如,更改列數很棘手),上述方法將很好地工作。
此question詳細介紹了MS SQL中可用於生成腳本的工具。
2
但是,如果你確實刪除了列,那麼你將會丟失數據,因爲那些列/表(據說)會包含一些數據。由於我認爲任何回滾通常都是暫時的,因爲發現了一個錯誤,所以回滾是爲了在修復時進行回滾,然後重新安裝或多或少相同的更改,如果用戶可能會感到不安您丟失了這些數據,並且系統修復後必須重新輸入。
我建議你應該只允許添加表和列,不要修改或刪除,那麼你可以只回滾代碼並保持原樣,如果你有很多回滾可能會導致一些未使用的列,但不應該經常發生這樣的情況,即有人錯誤地添加了表/列,在這種情況下,DBA可以手動刪除它們。
相關問題
- 1. 如何在不丟失數據的情況下重命名MySQL數據庫?
- 2. 如何在不丟失數據的情況下重命名數據庫?
- 3. 如何在不丟失未刪除數據的情況下快照數據庫?
- 4. Django - 在不丟失數據的情況下將數據添加到數據庫
- 5. 如何在不丟失表格的情況下更新數據庫模式
- 6. 如何在不丟失形狀的情況下過濾數據?
- 7. 如何在不丟失數據的情況下刪除分區?
- 8. 如何在不丟失數據的情況下切換UIViews?
- 9. 在不知道目標數據庫的情況下部署數據庫項目
- 10. 如何在不丟失舊數據的情況下在sqlite數據庫上添加數據?
- 11. 如何在不丟失數據的情況下更改SQL數據庫中的列數據類型
- 12. 如何在不丟失數據的情況下更改核心數據SQLite數據庫的結構
- 13. 如何在不丟失原始數據的情況下更新數據庫模式
- 14. Laravel 5.2如何在不丟失數據的情況下更新遷移
- 15. psql - 如何在不丟表的情況下刷新數據庫內容
- 16. 如何在不創建新數據庫的情況下導入mySQL數據庫
- 17. 在沒有VSDBCMD的情況下部署VS2010數據庫項目?
- 18. 在不丟失數據的情況下更改列類型
- 19. 在不丟失當前數據的情況下升級Cassandra
- 20. 如何在不丟失數據的情況下下載加密的png文件?
- 21. 將最新更改部署到生產數據庫 - 不丟失數據
- 22. 如何在不丟失數據的情況下捕獲Linux VM的映像
- 23. 如何在不丟失數據框的情況下編輯LastName,FirstName的順序
- 24. SQLite3:如何在不丟失數據的情況下修改fileds的類型
- 25. 有沒有辦法在不丟失數據的情況下更新Primefaces表單?
- 26. 在不丟失數據的情況下更新VSTS用戶參考
- 27. 在不丟失數據的情況下更新最終工作表
- 28. 如何在不丟失數據的情況下更改模型類名稱?
- 29. 如何在不丟失索引的情況下轉換熊貓數據框?
- 30. 如何在不丟失標籤的情況下刮取網頁數據