2012-02-28 16 views
1

在我遇到的其他數據庫中,可以在還原數據庫的(腳本化)轉儲時關閉一致性檢查。這個想法是,當你從數據庫中刪除腳本時,你可以安全地恢復它,而不進行一致性檢查,既可以加快速度,又不會受到你隱藏在不同表中的的阻礙,鍵,視圖等關閉Microsoft SQL腳本的一致性檢查還原

(在Microsoft SQL(2005)你有 '生成和發佈腳本'。)

是否有MS SQL這樣的開關?很顯然,你如何再次打開它 - 以及如何在事後強制進行全局一致性檢查?

PS:我不一定需要此功能才能執行服務器生成的腳本。

回答

1

我不認爲它可以是多恩,但我不知道。

什麼可以多恩是手動的代碼禁用約束:

ALTER TABLE table_name 
NOCHECK CONSTRAINT constraint_name 

,並使用相同的語法啓用它,只是改變NOCHECK來檢查

如果你真的需要它整個DB您可以輕鬆地構建一些代碼以循環訪問表和約束並執行此代碼

+0

謝謝!這裏有一個關於這個的谷歌搜索鏈接:http://odetocode.com/Articles/79.aspx。要在重新啓用約束後檢查約束,請執行'dbcc checkconstraints([tablename | database])''。 – stolsvik 2012-02-29 23:19:41

1

給定數據庫的「生成腳本」選項(2005)僅生成創建數據庫對象所需的代碼。它不編寫表格內容(例如按照MySQL),因此不需要禁用約束檢查的選項。

如果您希望恢復數據庫的副本及其數據,那麼最好的方法是執行數據庫備份,然後執行數據庫恢復。

有一些第三方備份產品可以使您從完整數據庫備份中僅恢復特定對象。

+0

但是你必須按照正確的順序來做,對吧?您是否可以創建視圖或例如沒有目標表的外鍵?某些數據庫設置需要循環 - 如果存在約束,則必須非常精細地處理 - 檢查「還原」。 PS:我不一定希望此功能執行服務器創建的腳本。 – stolsvik 2012-02-28 14:52:17

+0

我相信有一個腳本選項可以包含依賴對象。這是爲了確保所有必需的對象及其排序都被考慮在內。 – 2012-02-28 14:59:18

+0

您不能在不存在的數據庫對象上創建約束或視圖。 – 2012-02-28 15:00:23