資料庫因斷電、硬體故障、非正常關機導致損壞,狀包含查詢緩慢、資料遺漏、索引不一致等。需離線修復。
USE MASTER; GO
-- 1. 切換至單一使用者模式,斷開所有連線
EXEC sp_dboption 'YourDatabase', 'single user', 'true'; GO
-- 2. 執行完整資料庫一致性檢查並嘗試重建修復
DBCC CHECKDB('YourDatabase', REPAIR_REBUILD); GO
-- 3. 切換回目標資料庫逐表檢查修復
USE YourDatabase; GO
EXEC sp_msforeachtable 'DBCC CHECKTABLE(''?'', REPAIR_REBUILD)'; GO
-- 4. 恢復多使用者模式
EXEC sp_dboption 'YourDatabase', 'single user', 'false'; GO
| 選項 | 說明 |
|---|---|
REPAIR_REBUILD | 執行無資料遺失的修復動作(重建索引、修正頁面鏈結等),較安全。 |
REPAIR_ALLOW_DATA_LOSS | 允許資料遺失的深度修復(配置頁重建、刪除損壞資料列),最後手段,務必先備份。 |
sp_msforeachtable | 未文件化預存程序,逐一對每個使用者表執行指令,`?` 為表名佔位符。 |
DBCC CHECKDB 配合單一使用者模式是 SQL Server 資料庫修復標準流程。優先使用 REPAIR_REBUILD 避免資料遺失,若無效再評估 REPAIR_ALLOW_DATA_LOSS。平時落實備份策略、監控 I/O 錯誤、定期執行 DBCC CHECKDB (僅檢查不修復) 才是根本預防之道。