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

使用 DBCC CHECKDB 手動修復損壞資料庫完整流程

     編輯:關於SqlServer

適用場景

資料庫進入 SUSPECT 模式、DBCC 檢測到一致性錯誤、備份不可用時的緊急修復。

標準修復流程

-- 1. 設為單一使用者模式,強制回滾現有連線
ALTER DATABASE accp SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

-- 2. 設為緊急模式,允許系統管理員存取
ALTER DATABASE accp SET EMERGENCY;
GO

-- 3. 檢查損壞詳情
DBCC CHECKDB ('accp');
GO

-- 4. 依錯誤嚴重度依序嘗試修復
-- 輕微錯誤:快速修復
DBCC CHECKDB ('accp', REPAIR_FAST);
GO

-- 索引損壞:重建索引修復
DBCC CHECKDB ('accp', REPAIR_REBUILD);
GO

-- 嚴重損壞:允許資料遺失修復(最後手段)
DBCC CHECKDB ('accp', REPAIR_ALLOW_DATA_LOSS);
GO

-- 5. 恢復多使用者模式
ALTER DATABASE accp SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO

修復選項對照表

選項適用情境風險等級
REPAIR_FAST輕微結構錯誤、向前相容性低
REPAIR_REBUILD索引損壞、非叢集索引重建中
REPAIR_ALLOW_DATA_LOSS資料頁損壞、配置錯誤極高(會刪除損壞資料)

關鍵警示

  • 務必先備份:修復前對損壞資料庫執行完整備份(含記錄)
  • 資料遺失風險:REPAIR_ALLOW_DATA_LOSS 會犧牲資料完整性換取結構一致性
  • 根因分析:修復後必須調查硬體、IO 子系統、驅動程式等根本原因
  • 驗證:修復完成後再次執行 DBCC CHECKDB 確認無錯誤

最佳實務建議

  1. 建立定期 DBCC CHECKDB 排程(建議離峰時段)
  2. 啟用頁面驗證 CHECKSUM:ALTER DATABASE ... SET PAGE_VERIFY CHECKSUM
  3. 配置可靠的備份策略(完整+差異+記錄)
  4. 監控 I/O 錯誤事件 (823, 824, 825)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved