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

SQL Server 資料庫修復實戰:DBCC CHECKDB/CHECKTABLE/DBREINDEX 完整操作手冊

     編輯:關於SqlServer

前置準備:進入單一使用者模式

USE master;
DECLARE @db SYSNAME = N'YourDB';
EXEC sp_dboption @db, N'single', N'true';  -- 2005/2008 語法
-- 或 ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; (2012+)

1. DBCC CHECKDB:資料庫層級一致性檢查與修復

-- 允許資料遺失的修復(最後手段)
DBCC CHECKDB (@db, REPAIR_ALLOW_DATA_LOSS);

-- 重建索引修復(不遺失資料,僅修復索引不一致)
DBCC CHECKDB (@db, REPAIR_REBUILD);

執行順序建議:先跑 REPAIR_REBUILD,若仍報錯才考慮 REPAIR_ALLOW_DATA_LOSS(可能刪除損壞頁面資料)。

2. DBCC CHECKTABLE:單一資料表修復


-- 針對 CHECKDB 報錯的特定表
DBCC CHECKTABLE ('YourTable', REPAIR_ALLOW_DATA_LOSS);
DBCC CHECKTABLE ('YourTable', REPAIR_REBUILD);

適用於僅少數表損壞,避免全庫掃描耗時。

3. 驗證修復結果

DBCC CHECKDB (@db);  -- 無錯誤訊息即代表修復成功

4. 歸還多使用者模式

EXEC sp_dboption @db, N'single', N'false';
-- 或 ALTER DATABASE [YourDB] SET MULTI_USER;

5. DBCC DBREINDEX:重建索引消除碎片

-- 重建指定表所有索引
DBCC DBREINDEX ('YourTable', '');

-- 重建單一索引
DBCC DBREINDEX ('YourTable', 'IX_YourIndex');

SQL 2005+ 建議改用 ALTER INDEX ... REBUILD(支援 ONLINE、MAXDOP、DATA_COMPRESSION 等選項)。

6. 其他常用修復指令速查

指令用途
DBCC CHECKIDENT ('Table', RESEED, 0)重設身分識別欄位種子值
DBCC CLEANTABLE (db_id, 'Table')回收變長欄位卸除後的空間
DBCC UPDATEUSAGE (db_name)修正 sysindexes 頁面/資料列計數不準
DBCC FREEPROCCACHE清除計畫快取(謹慎使用)

關鍵提醒

  1. 修復前必備份:REPAIR_ALLOW_DATA_LOSS 可能永久刪除資料。
  2. 損壞嚴重時,優先考慮從備份還原而非修復。
  3. 定期執行 DBCC CHECKDB(建議每週)並保留輸出日誌,早發現早處理。
  4. 啟用 PAGE_VERIFY CHECKSUM(資料庫屬性)讓 SQL Server 自動偵測頁面損壞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved