Sql-Server-2008

回滾生成腳本

  • October 13, 2012

在應用程序開發過程中,使用者經常想要添加新模組、業務規則等。所以我經常使用 SQL Server 2008 選項從開發數據庫創建腳本以生成新表,然後我將在發布之前在生產伺服器上執行這些表應用程序的新版本。

所以我想知道是否有一種方法可以將整個生成腳本文件放入事務中,如果將所有內容返回到以前的狀態、沒有添加新表、插入數據等出現錯誤,則可以回滾更改。

如果有理由不推薦這種方法,請解釋。

理論上,您可以做一些事情,比如將腳本執行包裝在事務中。您可以從處理 GO 批處理分隔符或腳本中的 sqlcmd 擴展的應用程序庫(如dbutilssqlcmd或 SMO)執行 .sql 批處理文件。ServerConnection.ExecuteNonQuery

然而在實踐中,這幾乎是不可能的。由於鎖定更改,將腳本包裝在事務中可能會產生意外結果。事務中不允許某些 DDL 語句。該腳本可能包含 sqlcmd 擴展指令:connect,這會擾亂整個事務處理。

另一種方法是使用遷移,它在應用程序中編碼並處理更改的前滾和回滾。但要有效,這些步驟必須是冪等的(即使多次呼叫也會產生相同的結果),這在實踐中很難實現。

最安全也是最簡單的方法是依賴遷移之前進行的備份,如果在 V. next 的部署過程中出現任何問題,這將提供回滾到備份的能力。如果將數據庫快照用作備份,這將非常容易實現並且非常有效。

當然,如果有 24/7 的可用性要求,情況會發生巨大變化,但是在不停機的情況下推出升級是一個比這篇文章和解決方案價值數百萬美元更大的主題,這不太可能是你想要的。

引用自:https://dba.stackexchange.com/questions/25845