| 命令 | 用途 | 風險等級 | 適用情境 |
|---|---|---|---|
DBCC CHECKDB ('db', REPAIR_FAST) | 快速修復,僅處理輕微一致性問題 | 低 | 輕微損壞、定期維護 |
DBCC CHECKDB ('db', REPAIR_REBUILD) | 重建索引、修復非叢集索引、不遺失資料 | 低 | 索引損壞、資料頁完整 |
DBCC CHECKDB ('db', REPAIR_ALLOW_DATA_LOSS) | 刪除損壞頁、重建結構、可能遺失資料 | 極高 | 嚴重損壞、無備份可還原、最後手段 |
執行 REPAIR 選項前,必須將資料庫設為單一使用者模式,否則會報錯。
-- 方法 1:ALTER DATABASE(SQL Server 2005+ 標準語法,建議)
USE master;
GO
ALTER DATABASE DatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 方法 2:sp_dboption(SQL Server 2000 相容語法,不建議新專案使用)
USE master;
GO
EXEC sp_dboption 'DatabaseName', 'single user', 'true';
GO
WITH ROLLBACK IMMEDIATE:立即回滾其他進行中的交易,強制斷開所有連線。DBCC CHECKDB ('db', REPAIR_REBUILD);DBCC CHECKDB ('db', REPAIR_ALLOW_DATA_LOSS);
DBCC CHECKDB ('db'); 確認無錯誤訊息。ALTER DATABASE DatabaseName SET MULTI_USER;DBCC CHECKDB 定期檢查(建議每週非尖峰時段)。ALTER DATABASE db SET PAGE_VERIFY CHECKSUM;msdb.dbo.suspect_pages 表,及早發現可疑頁面。REPAIR_ALLOW_DATA_LOSS 會永久刪除損壞資料頁面上的資料。 僅在確無完整備份可還原、且業務接受資料遺失時使用。修復前務必完整複製資料庫檔案保留現場。