Share via


DBCC (Transact-SQL)

Transact-SQL 程式設計語言提供可用來作為 SQL Server 2005 資料庫主控台命令的 DBCC 陳述式。

資料庫主控台命令陳述式的分組類別目錄如下。

命令類別目錄 執行

維護

維護資料庫、索引或檔案群組的作業。

其他

啟用追蹤旗標或從記憶體中移除 DLL 之類的其他作業。

資訊

收集和顯示各類型資訊的作業。

驗證

資料庫、資料表、索引、目錄、檔案群組或資料庫頁面配置的驗證作業。

DBCC 命令有輸入參數和傳回值。所有 DBCC 命令參數都可以接受 Unicode 和 DBCS 常值。

使用 DBCC 結果集輸出

許多 DBCC 命令都可以利用 WITH TABLERESULTS 選項,以表格形式來產生輸出。這項資訊可以載入資料表中,以用於其他用途。以下是一個範例指令碼:

-- Create the table to accept the results.
CREATE TABLE #tracestatus (
   TraceFlag int,
   Status int
   )

-- Execute the command, putting the results in the table.
INSERT INTO #tracestatus 
   EXEC ('DBCC TRACESTATUS (-1) WITH NO_INFOMSGS')

-- Display the results.
SELECT * 
FROM #tracestatus
GO

DBCC 內部資料庫快照集使用方式

下列 DBCC 命令作用於 SQL Server Database Engine 所建立的內部唯讀資料庫快照集。這可以防止在執行這些命令時,發生封鎖和並行問題。如需詳細資訊,請參閱<資料庫快照集>。

DBCC CHECKALLOC

DBCC CHECKDB

DBCC CHECKCATALOG

DBCC CHECKFILEGROUP

DBCC CHECKTABLE

 

當您執行這些 DBCC 命令時,Database Engine 會建立一個資料庫快照集,且會使它進入交易一致狀態。之後,DBCC 命令會針對這個快照集來進行檢查。DBCC 命令完成之後,會卸除這個快照集。

有時候,並不需要或無法建立內部資料庫快照集。當這個情況發生時,會針對實際的資料庫來執行 DBCC 命令。如果資料庫在線上,DBCC 命令會利用資料表鎖定來確保所檢查之物件的一致性。這個行為與指定了 WITH TABLOCK 選項的情況相同。

當在下列情況下執行 DBCC 命令時,不會建立內部資料庫快照集:

  • 針對 master,且 SQL Server 執行個體在執行單一使用者模式。
  • 針對 master 以外的資料庫,但已利用 ALTER DATABASE 陳述式,使資料庫進入單一使用者模式。
  • 針對唯讀資料庫。
  • 針對已利用 ALTER DATABASE 陳述式,設定為緊急模式的資料庫。
  • 針對 tempdb。在這個情況下,會因為內部限制而無法建立資料庫快照集。
  • 使用 WITH TABLOCK 選項。在這個情況下,DBCC 會接受要求,不會建立資料庫快照集。

當針對下列項目來執行命令時,DBCC 命令會使用資料表鎖定,而不是內部資料庫快照集:

  • 唯讀檔案群組。
  • FAT 檔案系統。
  • 不支援「具名資料流」的磁碟區。
  • 不支援「替代資料流」的磁碟區。
ms188796.note(zh-tw,SQL.90).gif附註:
試圖利用 WITH TABLOCK 選項來執行 DBCC CHECKALLOC 或 DBCC CHECKDB 的對等部分,需要資料庫 X 鎖定。這個資料庫鎖定無法設定在 tempdbmaster 上,在所有其他資料庫上,也可能會失敗。
ms188796.note(zh-tw,SQL.90).gif附註:
如果無法建立內部資料庫快照集,在針對 master 執行 DBCC CHECKDB 時會失敗。

DBCC 命令的進度報告

在 SQL Server 2005 中,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

在這個階段期間,會檢查資料庫中的配置結構。

ms188796.note(zh-tw,SQL.90).gif附註:

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 物件。

ms188796.note(zh-tw,SQL.90).gif附註:

當執行 DBCC CHECKTABLE 時,不會執行這個階段。

不報告進度。

DBCC CHECKCATALOG

在這個階段期間,會檢查資料庫目錄的一致性。

ms188796.note(zh-tw,SQL.90).gif附註:

當執行 DBCC CHECKTABLE 時,不會執行這個階段。

不報告進度。

DBCC IVIEW CHECK

在這個階段中,會檢查資料庫中任何索引檢視的邏輯一致性。

在所檢查的個別資料庫檢視層級報告的進度。

資訊陳述式

DBCC CONCURRENCYVIOLATION

DBCC SHOW_STATISTICS

DBCC INPUTBUFFER

DBCC SHOWCONTIG

DBCC OPENTRAN

DBCC SQLPERF

DBCC OUTPUTBUFFER

DBCC TRACESTATUS

DBCC PROCCACHE

DBCC USEROPTIONS

驗證陳述式

DBCC CHECKALLOC

DBCC CHECKFILEGROUP

DBCC CHECKCATALOG

DBCC CHECKIDENT

DBCC CHECKCONSTRAINTS

DBCC CHECKTABLE

DBCC CHECKDB

 

維護陳述式

DBCC CLEANTABLE

DBCC INDEXDEFRAG

DBCC DBREINDEX

DBCC SHRINKDATABASE

DBCC DROPCLEANBUFFERS

DBCC SHRINKFILE

DBCC FREEPROCCACHE

DBCC UPDATEUSAGE

其他陳述式

DBCC dllname (FREE)

DBCC TRACEOFF

DBCC HELP

DBCC TRACEON