DBCC (Database Consistency Checker) 是SQL Server核心維護工具集,分為維護、雜項、狀態、驗證四大類。本文整理高頻命令語法與典型場景,供DBA日常運維速查。
一、維護語句
| 命令 | 用途 | 典型語法 |
DBCC DBREINDEX | 重建表索引 (填充因子可調) | DBCC DBREINDEX ('dbo.table', '', 80) WITH NO_INFOMSGS |
DBCC INDEXDEFRAG | 在線整理索引碎片 (非阻塞) | DBCC INDEXDEFRAG (db_id, 'table', 'index') WITH NO_INFOMSGS |
DBCC SHRINKDATABASE | 收縮數據庫數據文件 | DBCC SHRINKDATABASE (db_name, 20) -- 目標20%剩餘空間 |
DBCC SHRINKFILE | 收縮指定文件 (數據/日誌) | DBCC SHRINKFILE (log_file, 100) -- 壓縮至100MB |
DBCC UPDATEUSAGE | 修正 sysindexes 頁計數錯誤 | DBCC UPDATEUSAGE (0) WITH COUNT_ROWS |
二、雜項語句
| 命令 | 用途 | 語法 |
DBCC TRACEON/OFF | 啟用/禁用追蹤標志 | DBCC TRACEON (3604, -1) -- 全局啟用3604 |
三、狀態語句
| 命令 | 用途 | 關鍵參數 |
DBCC SHOWCONTIG | 顯示表/索引碎片信息 | WITH TABLERESULTS, ALL_INDEXES, FAST (推薦) |
DBCC SHOW_STATISTICS | 查看統計信息直方圖 | DBCC SHOW_STATISTICS ('table', 'index') |
四、驗證語句 (核心完整性檢查)
| 命令 | 檢查範圍 | 修復選項 |
DBCC CHECKALLOC | 磁盤空間分配結構 | REPAIR_ALLOW_DATA_LOSS / REPAIR_FAST / REPAIR_REBUILD |
DBCC CHECKCATALOG | 系統表一致性 | WITH NO_INFOMSGS |
DBCC CHECKCONSTRAINTS | 表約束完整性 | WITH ALL_CONSTRAINTS |
DBCC CHECKDB | 全庫對象分配+結構 (最常用) | WITH PHYSICAL_ONLY, NO_INFOMSGS, ALL_ERRORMSGS |
DBCC CHECKFILEGROUP | 文件組所有表 | WITH ESTIMATEONLY (預估耗時) |
DBCC CHECKTABLE | 單表/索引視圖數據+索引+LOB頁 | WITH PHYSICAL_ONLY (僅物理檢查,快) |
實戰最佳實踐
- 例行檢查:每日
DBCC CHECKDB WITH PHYSICAL_ONLY (快);每週 DBCC CHECKDB (全)。
- 碎片維護:
SHOWCONTIG 掃描 → 碎片 > 30% 用 INDEXDEFRAG (在線);> 50% 考慮 DBREINDEX (離線/Enterprise版 ONLINE=ON)。
- 收縮慎用:
SHRINKFILE 會產生碎片,僅在磁盤空間極度緊張且確不再增長時使用,收縮後必須重建索引。
- 修復風險:
REPAIR_ALLOW_DATA_LOSS 可能丟失數據,僅作最後手段,修復前必須全備份。
常用追蹤標志速查
3604:輸出重定向到客戶端 (配合 DBCC PAGE)。
1204/1222:死鎖圖輸出到錯誤日誌。
3226:抑制備份成功日誌 (減少日誌噪音)。
建議將本表格導出為PDF貼在工位,關鍵時刻秒級查閱。