DBCC CHECKTABLE 的檢查與修復對象是指定的資料表或索引檢視表。
DBCC CHECKDB 與 DBCC CHECKTABLE 都支援修復的作業,以下為參數的說明:
(1) REPAIR_ALLOW_DATA_LOSS
嘗試修復所有報告的錯誤。這些修復可能會造成某些資料的遺失。
(2) REPAIR_FAST
維護這個語法的目的,只是為了與舊版相容。不會執行任何修復動作。
(3) REPAIR_REBUILD
執行不可能造成資料遺失的修復,這可包括快速修復 (例如,修復非叢集索引中遺失的資料列) 以及更耗時的修復 (例如,重建索引)。
REPAIR_REBUILD 不會修復與 FILESTREAM 資料有關的錯誤。
而且,指定的資料庫必須為「單一使用者模式」。
重要事項:
- 最好不要使用這些 REPAIR 選項。
- 若要修復錯誤,我們建議您從備份中還原。
- 修復作業並不考慮資料表或資料表之間的任何條件約束。
- 如果指定的資料表涉及一或多項條件約束,建議您在修復作業之後,執行 DBCC CHECKCONSTRAINTS。
- 如果您必須使用 REPAIR,請執行不含修復選項的 DBCC CHECKDB 來尋找要使用的修復層級。
- 如果您使用 REPAIR_ALLOW_DATA_LOSS 層級,建議您在搭配這個選項執行 DBCC CHECKDB 之前,先備份資料庫。
以下為 DBCC CHECKDB 搭配使用 REPAIR_REBUILD 修復參數的範例程式碼:
USE master GO -- 先設定此資料庫的狀態為:SINGLE_USER ALTER DATABASE [資料庫名稱] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO -- 執行 DBCC CHECKDB 搭配使用 REPAIR_REBUILD 參數 DBCC CHECKDB (Northwind, REPAIR_REBUILD); GO /* 若是非處於「單一使用者模式」時,將遇到以下的錯誤: 訊息 7919,層級 16,狀態 3,行 1 修復陳述式並未處理。資料庫必須處於單一使用者模式。 */ -- 設定此資料庫的狀態為:MULTI_USER,回復正常上線 ALTER DATABASE [資料庫名稱] SET MULTI_USER; GO
以下為 DBCC CHECKTABLE 搭配使用 REPAIR_REBUILD 修復參數的範例程式碼:
USE master GO -- 先設定此資料庫的狀態為:SINGLE_USER -- 使用終止選項 WITH ROLLBACK IMMEDIATE。所有未完成的交易都會回復,而且資料庫的任何其他連接都會立即中斷 ALTER DATABASE [資料庫名稱] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO -- 執行 DBCC CHECKTABLE 搭配使用 REPAIR_REBUILD 參數 USE [資料庫名稱] GO DBCC CHECKTABLE ([資料表], REPAIR_REBUILD); GO /* 若是非處於「單一使用者模式」時,將遇到以下的錯誤: 訊息 7919,層級 16,狀態 3,行 1 修復陳述式並未處理。資料庫必須處於單一使用者模式。 */ -- 設定此資料庫的狀態為:MULTI_USER,回復正常上線 ALTER DATABASE [資料庫名稱] SET MULTI_USER; GO
參考資料:
DBCC CHECKDB (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms176064(v=SQL.105).aspx
DBCC CHECKTABLE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms174338.aspx
沒有留言:
張貼留言