DBCC (Database Console Commands) 是 SQL Server 的「瑞士刀」,涵蓋維護、驗證、追蹤、除錯等百餘條指令。本文揭秘 DBCC 分類體系、如何查詢完整命令清單、非公開命令真相,並精選高頻實戰命令詳解用法。
Database Console Commands** — 資料庫主控台命令。類似瀏覽器開發者工具的 Console,提供直接與儲存引擎互動的介面,執行維護、診斷、修復、追蹤等底層操作。
DBCC HELP ('?'))官方文件列出約 **32 條公開命令**,分為四大類:
| 類別 | 代表命令 | 用途 |
|---|---|---|
| 維護 | CHECKDB, CHECKTABLE, INDEXDEFRAG, SHRINKFILE, UPDATEUSAGE | 完整性檢查、索引整理、縮減檔案、修正頁面計數 |
| 資訊 | INPUTBUFFER, OPENTRAN, PROCCACHE, SQLPERF, TRACESTATUS | 檢視輸入緩衝、開啟交易、程序快取、效能計數器、追蹤旗標狀態 |
| 驗證 | CHECKALLOC, CHECKCATALOG, CHECKCONSTRAINTS, CHECKIDENT | 頁面配置、目錄一致性、約束驗證、Identity 值檢查 |
| 雜項 | FREEPROCCACHE, FREESYSTEMCACHE, DROPCLEANBUFFERS, TRACEON/OFF, PINTABLE | 清除快取、清空緩衝區、啟用/停用追蹤旗標、釘住表 |
DBCC HELP ('?') WITH NO_INFOMSGS 或查詢 sys.dm_xe_objects 可見約 **100+ 內部命令**(如 DBCC PAGE, DBCC IND, DBCC LOG, DBCC CHECKFILEGROUP 等)。DBCC HELP ('CHECKDB') 顯示單一命令語法。-- 標準檢查(含索引、配置、目錄)
DBCC CHECKDB ('MyDB') WITH NO_INFOMSGS, ALL_ERRORMSGS;
-- 僅檢查配置頁(快速)
DBCC CHECKALLOC ('MyDB');
-- 僅檢查特定表
DBCC CHECKTABLE ('dbo.Orders') WITH PHYSICAL_ONLY; -- 僅物理結構,速度最快
CHECKDB,每日 PHYSICAL_ONLY。REPAIR_REBUILD (無資料遺失) 或 REPAIR_ALLOW_DATA_LOSS (最後手段,**務必先備份**)。-- 舊語法 (棄用)
DBCC INDEXDEFRAG ('MyDB', 'dbo.Orders', 'IX_Orders_CustId');
-- 現代標準語法
ALTER INDEX IX_Orders_CustId ON dbo.Orders REORGANIZE; -- 線上、輕量
ALTER INDEX IX_Orders_CustId ON dbo.Orders REBUILD; -- 重建、可離線/ONLINE
-- 縮減資料檔至 5 GB(保留空間)
DBCC SHRINKFILE (N'MyDB_Data', 5120);
-- 縮減記錄檔(需先備份記錄/切換簡單復原模式)
DBCC SHRINKFILE (N'MyDB_Log', 1024);
警告:縮減會造成**嚴重索引碎片**、阻塞、IO 飆升。**極少數情況**(如一次性大量刪除後永不增長)才考慮,並**必須緊接索引重建**。
-- 清除全例項計畫快取(謹慎!會導致編譯風暴)
DBCC FREEPROCCACHE;
-- 精準清除單一計畫
DBCC FREEPROCCACHE (0x05000F00...); -- plan_handle
-- 清除特定資源池快取 (Resource Governor)
DBCC FREESYSTEMCACHE ('ALL', 'PoolName');
CHECKPOINT; -- 先將髒頁寫入磁碟
DBCC DROPCLEANBUFFERS; -- 移除所有乾淨頁面,模擬冷快取
-- 全域啟用 1222 (死結詳細資訊寫入錯誤日誌)
DBCC TRACEON (1222, -1);
-- 啟用 3604 (將 DBCC 輸出導向用戶端)
DBCC TRACEON (3604);
DBCC PAGE (0, 1, 100, 3); -- 查看頁面內容
DBCC INPUTBUFFER (52); -- SPID 52
DBCC OPENTRAN ('MyDB');
DBCC CHECKDB 完整性檢查 + 錯誤日誌告警。sys.dm_db_index_physical_stats 檢查碎片 → REORGANIZE/REBUILD(取代 DBCC INDEXDEFRAG)。DBCC SQLPERF(LOGSPACE) 監控記錄檔使用率。DBCC TRACESTATUS 確認關鍵追蹤旗標 (1222, 3226, 4199 等) 狀態。DBCC CHECKIDENT 核對 Identity 值是否接近上限。DBCC 是 DBA 深入引擎內部的窗口,善用公開命令進行日常維護,遇到疑難雜症時再在專家指引下謹慎嘗試非公開命令,是安全高效的原則。