資料庫進入 Suspect (置疑) 狀態通常因檔案損壞、記錄檔遺失、磁碟錯誤。本文提供分級修復流程:標準修復 → 單一使用者修復 → 重建記錄檔 (僅有 MDF)。
.mdf/.ldf (防修復失敗更糟)。USE master;
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
UPDATE sysdatabases SET status = 32768 WHERE name = 'MyDB';
DBCC CHECKDB('MyDB');
EXEC sp_dboption 'MyDB', 'single user', 'true';
DBCC CHECKDB('MyDB', REPAIR_ALLOW_DATA_LOSS);
-- 若提示非單一使用者,重啟服務後重試
DBCC CHECKDB('MyDB'); -- 複查
EXEC sp_resetstatus 'MyDB'; -- 清除置疑旗標
EXEC sp_dboption 'MyDB', 'single user', 'false';
-- 重啟服務驗證
.mdf、刪除 .ldf → 啟動服務。DBCC REBUILD_LOG('MyDB', 'D:\Data\MyDB_Log.ldf');
EXEC sp_dboption 'MyDB', 'single user', 'true';
DBCC CHECKDB('MyDB', REPAIR_ALLOW_DATA_LOSS);
-- 或 DBCC CHECKTABLE('ProblemTable', REPAIR_ALLOW_DATA_LOSS);
| 目的 | 指令 | 備註 |
|---|---|---|
| 允許系統表更新 | sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE | 舊版相容,新版慎用 |
| 緊急模式 | UPDATE sysdatabases SET status=32768 WHERE name='DB' | status=-32768 亦可 |
| 單一使用者 | sp_dboption 'DB', 'single user', 'true' / ALTER DATABASE DB SET SINGLE_USER | 新版建議 ALTER DATABASE |
| 修復允許資料遺失 | DBCC CHECKDB('DB', REPAIR_ALLOW_DATA_LOSS) | 最後手段,必先備份 |
| 清除置疑旗標 | sp_resetstatus 'DB' | |
| 重建記錄檔 | DBCC REBUILD_LOG('DB', 'Path\DB_Log.ldf') / CREATE DATABASE ... FOR ATTACH_REBUILD_LOG | 新版推薦 FOR ATTACH_REBUILD_LOG |
REPAIR_ALLOW_DATA_LOSS 可能刪除損壞頁面資料。sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;。依嚴重程度選擇修復路徑,務必先備份現有檔案,修復後驗證業務資料完整性。