DBCC (Transact-SQL)
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體
Transact-SQL 程式設計語言提供可用來作為 SQL Server 資料庫主控台命令的 DBCC 陳述式。
資料庫主控台命令陳述式的分組類別目錄如下。
命令類別目錄 | 執行 |
---|---|
維護 | 維護資料庫、索引或檔案群組的作業。 |
其他 | 啟用追蹤旗標或從記憶體中移除 DLL 之類的其他作業。 |
資訊 | 收集和顯示各類型資訊的作業。 |
驗證 | 資料庫、資料表、索引、目錄、檔案群組或資料庫頁面配置的驗證作業。 |
DBCC 命令有輸入參數和傳回值。 所有 DBCC 命令參數都可以接受 Unicode 和 DBCS 常值。
DBCC 內部資料庫快照集使用方式
下列 DBCC 命令會在資料庫引擎所建立的內部唯讀資料庫快照集上運作。 快照集可以防止在執行這些命令時,發生封鎖和並行問題。 如需詳細資訊,請參閱資料庫快照集 (SQL Server)。
DBCC CHECKALLOC
DBCC CHECKCATALOG
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
當您執行這些 DBCC 命令時,資料庫引擎會建立一個資料庫快照集,且會使其進入交易一致狀態。 之後,DBCC 命令會針對這個快照集來進行檢查。 DBCC 命令完成之後,會卸除這個快照集。
有時候,並不需要或無法建立內部資料庫快照集。 當這個情況發生時,會針對實際的資料庫來執行 DBCC 命令。 如果資料庫在線上,DBCC 命令會利用資料表鎖定來確保所檢查之物件的一致性。 這個行為與指定了 WITH TABLOCK
選項的情況相同。
當在下列情況下執行 DBCC 命令時,系統不會建立內部資料庫快照集:
- 針對
master
資料庫,SQL Server 的執行個體正在單一使用者模式下執行。 - 針對
master
以外,但已利用ALTER DATABASE
陳述式,使資料庫進入單一使用者模式的資料庫。 - 針對唯讀資料庫。
- 針對已使用
ALTER DATABASE
陳述式,設定為緊急模式的資料庫。 - 針對
tempdb
。 在這個情況下,系統會因為內部限制而無法建立資料庫快照集。 - 使用
WITH TABLOCK
選項。 在這個情況下,DBCC 會接受要求,不會建立資料庫快照集。
當針對下列項目來執行命令時,DBCC 命令會使用資料表鎖定,而不是內部資料庫快照集:
- 唯讀檔案群組
- FAT 檔案系統
- 不支援「具名資料流」的磁碟區
- 不支援「替代資料流」的磁碟區
注意
請嘗試執行 DBCC CHECKALLOC
,或 DBCC CHECKDB
的對等項目,透過使用 WITH TABLOCK
選項需要資料庫獨佔 (X
) 鎖定。 這個資料庫鎖定無法在 tempdb
或 master
上設定,在所有其他資料庫上可能會失敗。
注意
如果無法建立內部資料庫快照集,在針對 master
執行 DBCC CHECKDB
時會失敗。
DBCC 命令的進度報告
sys.dm_exec_requests
目錄檢視包含 DBCC CHECKDB
、CHECKFILEGROUP
和 CHECKTABLE
命令的進度和目前執行階段的相關資訊。 percent_complete
資料行指出命令的完成比例,command
資料行則報告命令目前的執行階段。
進度單位的定義會隨著 DBCC 命令目前的執行階段而不同。 有時候,進度會以資料庫頁面的資料粒度來報告;在其他階段,則以單一資料庫或配置修復的資料粒度來報告。 下表描述每個執行階段,以及命令報告進度的資料粒度。
執行階段 | 描述 | 進度報告資料粒度 |
---|---|---|
DBCC TABLE CHECK |
在這個階段中,會檢查資料庫中各物件的邏輯和實體一致性。 | 資料庫頁面層級所報告的進度。 每檢查 1000 個資料庫頁面,就會更新進度報告值。 |
DBCC TABLE REPAIR |
如果指定了 REPAIR_FAST 、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS ,而且有必須加以修復的物件錯誤,就會在這個階段期間執行資料庫修復。 |
個別修復層級所報告的進度。 每次修復完成,就會更新計數器。 |
DBCC ALLOC CHECK |
在這個階段期間,會檢查資料庫中的配置結構。 注意: DBCC CHECKALLOC 會執行相同的檢查。 |
未報告進度 |
DBCC ALLOC REPAIR |
如果指定了 REPAIR_FAST 、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS ,而且有必須加以修復的配置錯誤,就會在這個階段期間執行資料庫修復。 |
未報告進度。 |
DBCC SYS CHECK |
在這個階段期間,會檢查資料庫系統資料表。 | 資料庫頁面層級所報告的進度。 每檢查 1000 個資料庫頁面,就會更新進度報告值。 |
DBCC SYS REPAIR |
如果指定了 REPAIR_FAST 、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS ,而且有必須加以修復的系統資料表錯誤,就會在這個階段期間執行資料庫修復。 |
個別修復層級所報告的進度。 每次修復完成,就會更新計數器。 |
DBCC SSB CHECK |
在這個階段期間,系統會檢查 SQL Server Service Broker 物件。 注意:此階段在執行 DBCC CHECKTABLE 時不會執行。 |
未報告進度。 |
DBCC CHECKCATALOG |
在這個階段期間,系統會檢查資料庫目錄的一致性。 注意:此階段在執行 DBCC CHECKTABLE 時不會執行。 |
未報告進度。 |
DBCC IVIEW CHECK |
在這個階段中,會檢查資料庫中任何索引檢視的邏輯一致性。 | 在所檢查的個別資料庫檢視層級報告的進度。 |
資訊陳述式
- DBCC INPUTBUFFER
- DBCC SHOWCONTIG
- DBCC OPENTRAN
- DBCC OUTPUTBUFFER
- DBCC PROCCACHE
- DBCC SHOW_STATISTICS
- DBCC SQLPERF
- DBCC TRACESTATUS
- DBCC USEROPTIONS
驗證陳述式
- DBCC CHECKALLOC
- DBCC CHECKCATALOG
- DBCC CHECKCONSTRAINTS
- DBCC CHECKDB
- DBCC CHECKFILEGROUP
- DBCC CHECKIDENT
- DBCC CHECKTABLE
維護陳述式
- DBCC CLEANTABLE
- DBCC DBREINDEX
- DBCC DROPCLEANBUFFERS
- DBCC FREEPROCCACHE
- DBCC INDEXDEFRAG
- DBCC SHRINKDATABASE
- DBCC SHRINKFILE
- DBCC UPDATEUSAGE
其他陳述式
- DBCC dllname (FREE)
- DBCC HELP
- DBCC FLUSHAUTHCACHE
- DBCC TRACEOFF
- DBCC FREESESSIONCACHE
- DBCC TRACEON
- DBCC FREESYSTEMCACHE
- DBCC CLONEDATABASE (適用於:SQL Server 2014 (12.x) Service Pack 2 和更新版本。)