首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server SUSPECT (置疑) 狀態完整修復指南:五大方法與 DBCC 最佳實踐

     編輯:關於SqlServer

置疑狀態成因

  1. 資料/記錄檔設定「不自動增長」且空間耗盡。
  2. 設定「自動增長但限制最大值」且達上限。
  3. 無限制增長但磁碟剩餘空間不足。
  4. 意外斷電導致檔案損毀。
  5. 硬體故障 (磁碟壞軌、控制器錯誤)。

五大標準修復流程

方法一:釋放空間 + 重置狀態 + 恢復

-- 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。

關鍵提醒

  1. sp_resetstatus 僅清旗標,**不修復資料**;務必先解決空間/硬體根因。
  2. 僅 sysadmin 可執行;執行後**必須重啟服務**生效。
  3. 平時預防:啟用自動增長、無上限、監控磁碟剩餘、定期 DBCC CHECKDB、完整備份+記錄備份鏈完整。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved