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

SQL Server DBCC 命令完整指南:從追蹤旗標到資料庫維護實戰

     編輯:關於SqlServer

DBCC (Database Console Commands) 是 SQL Server 管理員診斷、維護、調校資料庫的核心工具箱。本文彙整 36 個常用 DBCC 命令,按功能分類詳解語法、參數與實戰場景,涵蓋死鎖追蹤、頁面檢視、一致性檢查、索引維護、記憶體管理、日誌縮減等核心運維場景,附上實測輸出範例,適合 DBA 隨時查閱。

一、追蹤旗標與死鎖診斷

1. 啟用死鎖記錄至 Error Log

DBCC TRACEON (1204, 3605, -1);  -- 1204:死鎖資訊, 3605:輸出至Error Log, -1:全域生效
GO
DBCC TRACESTATUS(-1);           -- 查看目前啟用的旗標
GO

常用追蹤旗標速查表:

旗標用途
1204記錄死鎖參與者的執行資料
1205記錄死鎖受害者資訊
1211停用鎖升級
2528禁用 DBCC CHECKDB 並行檢查
3604輸出結果至用戶端
3605輸出結果至 Error Log
8602忽略索引提示
8780強制完整最佳化

二、頁面與配置檢查

2. DBCC PAGE - 檢視資料頁內容

DBCC TRACEON(3604);  -- 輸出至用戶端
DBCC PAGE('Northwind', 1, 100, 1);  -- DB名, 檔案號, 頁號, 列印選項(0-3)

printopt 選項:0=標題, 1=逐行+偏移表, 2=整頁+偏移表, 3=逐行+欄位值。

3. DBCC CHECKALLOC - 檢查磁碟配置一致性

DBCC CHECKALLOC('Northwind');  -- 檢查頁面配置與系統表一致性

4. DBCC CHECKCATALOG - 系統目錄一致性

DBCC CHECKCATALOG('Northwind');

三、核心一致性檢查與修復

5. DBCC CHECKCONSTRAINTS - 約束完整性

DBCC CHECKCONSTRAINTS('Products') WITH ALL_CONSTRAINTS;

僅驗證邏輯約束(FK、CHECK),不檢查磁碟層面。

6. DBCC CHECKDB - 綜合健康檢查(核心命令)

DBCC CHECKDB 
    [ ( 'db_name' [ , NOINDEX | REPAIR_ALLOW_DATA_LOSS ] ) ]
    [ WITH 
        { NO_INFOMSGS | ALL_ERRORMSGS | PHYSICAL_ONLY | ESTIMATEONLY | TABLOCK }
    ];
  • PHYSICAL_ONLY:僅檢查實體頁面損壞,速度最快,適合大型資料庫例行巡檢。
  • REPAIR_ALLOW_DATA_LOSS:最後手段,可能遺失資料,需單用戶模式。

7. DBCC CLEANTABLE - 回收變長欄位刪除後的空間

DBCC CLEANTABLE ('db_name', 'table_name', [batch_size]);

執行 ALTER TABLE DROP COLUMN 後釋放 TEXT/IMAGE 或變長欄位殘留空間。

四、索引維護與碎片整理

8. DBCC DBREINDEX - 重建索引 (舊版,建議改用 ALTER INDEX REBUILD)

DBCC DBREINDEX ('table_name' [, index_name [, fillfactor ]]) [WITH NO_INFOMSGS];

9. DBCC INDEXDEFRAG - 線上索引碎片整理 (舊版,建議改用 ALTER INDEX REORGANIZE)

DBCC INDEXDEFRAG (db_id | 'db_name', table_id | 'table_name', index_id | 'index_name');

五、記憶體與快取管理

10. DBCC PINTABLE / UNPINTABLE - 釘住/釋放表於記憶體 (已棄用)

SQL Server 2005+ 不再支援,改由 Buffer Pool 自動管理。

11. DBCC DROPCLEANBUFFERS - 清除乾淨緩衝區 (測試冷快取用)

DBCC DROPCLEANBUFFERS;  -- 僅移除未修改的頁面,不影響髒頁

12. DBCC FREEPROCCACHE - 清除程序快取

DBCC FREEPROCCACHE;  -- 強制重新編譯所有計畫

可加參數清除特定計畫控制代碼:DBCC FREEPROCCACHE (0x05000600...)。

13. DBCC CACHESTATS / SQLPERF - 快取與效能統計

DBCC SQLPERF(LOGSPACE);   -- 各資料庫記錄檔使用率
DBCC SQLPERF(IOSTATS);    -- I/O 統計
DBCC SQLPERF(THREADS);    -- 執行緒狀態

六、資料庫檔案縮減與日誌管理

14. DBCC SHRINKDATABASE - 縮減整個資料庫

DBCC SHRINKDATABASE (db_name, [target_percent [, {NOTRUNCATE | TRUNCATEONLY}]]);

15. DBCC SHRINKFILE - 縮減指定檔案 (精準控制)

DBCC SHRINKFILE (file_id | 'file_name', [target_size [, {NOTRUNCATE | TRUNCATEONLY | EMPTYFILE}]]);

實戰技巧:先備份記錄檔 → 切換 SIMPLE 模式 → SHRINKFILE (N'log_name', 1, TRUNCATEONLY) → 切回 FULL 模式 → 立即完整備份。

七、進階診斷與內部結構

  • DBCC IND:列出索引/表使用的頁面清單。
  • DBCC LOG:檢視交易記錄檔內容。
  • DBCC DBINFO:顯示資料庫啟動頁、版本、檢查點等結構資訊。
  • DBCC REBUILD_LOG:重建遺失記錄檔的緊急手段(需允許系統表更新)。
  • DBCC OPENTRAN:找出最久未提交的交易與持有者 SPID。
  • DBCC INPUTBUFFER:查看指定 SPID 最後送入的 T-SQL 批次。

八、錯誤日誌與服務管理

16. DBCC ERRORLOG - 循環錯誤日誌 (等同 sp_cycle_errorlog)

DBCC ERRORLOG;  -- 關閉當前日誌,啟動新日誌檔

17. DBCC FLUSHPROCINDB - 清除指定資料庫的程序快取

DBCC FLUSHPROCINDB (db_id);

總結建議

  1. 例行巡檢:每週 CHECKDB WITH PHYSICAL_ONLY,每月完整 CHECKDB。
  2. 索引維護:依碎片率選擇 REORGANIZE (5-30%) 或 REBUILD (>30%),配合 FILLFACTOR。
  3. 日誌控制:FULL 模式務必定期記錄檔備份,避免無限增長;SHRINKFILE 僅作單次修正,不可常態化。
  4. 追蹤旗標:死鎖調查用 1204/1222,效能調校用 2371/4199,生產環境啟用前必須在測試環境驗證副作用。

掌握這些 DBCC 命令,能讓 DBA 從被動救火轉為主動預防,穩守資料庫健康防線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved