置疑狀態成因
- 資料/記錄檔設定「不自動增長」且空間耗盡。
- 設定「自動增長但限制最大值」且達上限。
- 無限制增長但磁碟剩餘空間不足。
- 意外斷電導致檔案損毀。
- 硬體故障 (磁碟壞軌、控制器錯誤)。
五大標準修復流程
方法一:釋放空間 + 重置狀態 + 恢復
-- 1. 清理磁碟空間 (刪舊備份、壓縮日誌、移動檔案)
-- 2. 允許系統表更新
USE master;
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
-- 3. 重置置疑旗標
EXEC sp_resetstatus 'DBName'; -- 回傳 "Database 'DBName' status reset!"
-- 4. 執行恢復
DBCC DBRECOVER('DBName');
-- 5. 關閉系統表更新
EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;
-- 6. 重啟 SQL Server 服務 (必要)
方法二:分離/附加 (檔案未損毀)
EXEC sp_detach_db 'DBName';
-- 移動 .mdf/.ldf 至新磁碟 (可選)
EXEC sp_attach_db 'DBName', '新路徑\DBName.mdf', '新路徑\DBName.ldf';
方法三:新增記錄檔強制恢復 (錯誤 9002 記錄檔滿)
EXEC sp_add_log_file_recover_suspect_db
'DBName', 'NewLog', 'D:\NewLog\DBName_NewLog.ldf', '10MB';
EXEC sp_resetstatus 'DBName';
方法四:移動資料檔到新磁碟 (錯誤 1105 檔案組滿)
EXEC sp_detach_db 'DBName';
-- 複製 .mdf 到新磁碟
EXEC sp_attach_db 'DBName', '新路徑\DBName.mdf', '原路徑\DBName.ldf';
方法五:新增資料檔強制恢復
EXEC sp_add_data_file_recover_suspect_db
'DBName', 'FG_Name', 'NewData', 'D:\NewData\DBName_NewData.ndf', '100MB';
EXEC sp_resetstatus 'DBName';
-- 或 ALTER DATABASE ADD FILE ... 後重啟服務
嚴重度 22/23 完整性錯誤處理
- Level 22:單表/索引損毀 →
DBCC CHECKTABLE、重建索引、或重啟 (若僅記憶體壞頁)。
- Level 23:整庫完整性受損 →
DBCC CHECKDB、評估損毀範圍、必要時從備份還原。
DBCC CHECKDB 執行最佳實踐
- 離峰時段執行 (CPU/磁碟密集)。
- 確保
tempdb 獨立快速磁碟、預留足夠空間 (DBCC CHECKDB WITH ESTIMATEONLY 預估)。
- 避開備份作業、大量查詢。
- 選項:
WITH NO_INFOMSGS 減輸出/Tempdb 用量。
WITH PHYSICAL_ONLY 僅檢查頁首部結構 (硬體故障快速篩查)。
- SQL 2000+ 使用 Schema Lock,不阻塞 DML,僅阻 DDL。
關鍵提醒
sp_resetstatus 僅清旗標,**不修復資料**;務必先解決空間/硬體根因。
- 僅
sysadmin 可執行;執行後**必須重啟服務**生效。
- 平時預防:啟用自動增長、無上限、監控磁碟剩餘、定期
DBCC CHECKDB、完整備份+記錄備份鏈完整。