2008-12-30 128 views
5

我正在對現有數據庫進行一些模式更改。創建SQL Server回滾腳本的最佳方法?

我備份了數據庫以獲取開發副本,並進行了更改。我將創建單個滾動腳本,以便在單個事務中遷移生產計算機上的更改。

是否有創建回滾腳本的最佳做法是否包含部署問題?我已經使用以下模式寫入之前,然後用手:

  • 丟棄新的約束和索引
  • 變更表刪除新列
  • 刪除添加的表
  • 提交交易

有更好的方法嗎?

回答

4

基本上就是這樣,我認爲除了你的方法外,還有很多東西可以補充。這就是我們在公司中的工作方式,我們的開發人員負責創建腳本和回滾腳本,並且我們負責將數據庫保留在應用初始更改之前的相同狀態。然後數據庫管理員在生產環境中運行它,如果有任何問題,他們將運行回滾腳本,一切恢復正常。請記住依賴關係以及更改對象的順序,然後向後創建回滾腳本。

1

如果它是一個相對較小的數據庫,只需在應用升級之前進行備份即可。如果一切都失靈了,你可以恢復。

一旦它開始生效並輸入新數據,您無論如何都無法真正回滾它。你只需要解決這些問題。

+0

我們不能創建備份和從本機上的備份恢復。它需要向前和向後作爲交易。 – FlySwat 2008-12-30 18:10:50

4

你缺少第五步

  • 丟棄新的約束和索引
  • 變更表刪除新列
  • 刪除添加的表
  • 提交交易
  • 測試地獄出來的在生產中運行它之前的腳本

更有效的方法是在發生更改時將其註冊爲RoRmigrationsdo。對於每個DB更改,您都會創建一個腳本,該腳本將應用更改並將其回滾(當然,您可以選擇)。然後您可以在版本控制下使用這些腳本,就像您的代碼一樣。

此外,如果您在數據庫中保留一個版本號,您可以通過使用版本號識別每個腳本並根據執行的操作增加或減少數據庫中的版本號來使其自動化一次。

1

如果您使用像Redgate的SQL Compare這樣的工具,您可以兩種方式在兩個數據庫之間運行比較,並使用兩者來創建所需的腳本。 prod腳本的開發人員將會對您所做的更改進行更改,並且prd to dev腳本將返回到原始生產數據庫狀態。這可以確保您不會在任何腳本中遺忘任何內容。

相關問題