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
沒有留言:
張貼留言