DBCC (Transact-SQL)

Transact-SQL プログラミング言語には、SQL Server のデータベース コンソール コマンドとして機能する DBCC ステートメントが用意されています。

データベース コンソール コマンドは、次のように分類されます。

コマンドの分類

実行内容

メンテナンス

データベース、インデックスまたはファイル グループを対象とするメンテナンス タスク。

その他

トレース フラグの有効化やメモリからの DLL の削除など、その他のタスク。

情報

さまざまな種類の情報を収集および表示するタスク。

検証

データベース、テーブル、インデックス、カタログ、ファイル グループ、またはデータベース ページの割り当ての検証操作。

DBCC コマンドは入力パラメータをとり、値を返します。すべての DBCC コマンド パラメータには、Unicode と DBCS の両方のリテラルを使用できます。

DBCC 内部データベース スナップショットの使用

次の DBCC コマンドは、データベース エンジンで作成される内部の読み取り専用データベース スナップショットに対して実行でき、コマンド実行時のブロックや同時実行の問題を回避できます。詳細については、「データベース スナップショット」を参照してください。

DBCC CHECKALLOC

DBCC CHECKDB

DBCC CHECKCATALOG

DBCC CHECKFILEGROUP

DBCC CHECKTABLE

 

DBCC コマンドの 1 つを実行すると、データベース エンジンではデータベース スナップショットが作成され、スナップショットはトランザクション全体で一貫性のある状態になります。その後、DBCC コマンドではこのスナップショットに対するチェックが行われます。DBCC コマンドの完了後、このスナップショットは削除されます。

内部データベース スナップショットが必要ではない場合や、内部データベース スナップショットを作成できない場合、DBCC コマンドは実際のデータベースに対して実行されます。データベースがオンラインの場合、DBCC コマンドではテーブルロックを使用して、チェックするオブジェクトの一貫性を確保します。この動作は、WITH TABLOCK オプションが指定される場合と同じです。

次の条件で DBCC コマンドを実行する場合、内部データベース スナップショットは作成されません。

  • master に対して実行する場合で、SQL Server インスタンスがシングル ユーザー モードで実行されている場合。

  • master 以外のデータベースに対して実行する場合で、データベースが ALTER DATABASE ステートメントによってシングル ユーザー モードに設定されている場合。

  • 読み取り専用データベースに対して実行する場合。

  • ALTER DATABASE ステートメントによって緊急モードに設定されたデータベースに対して実行する場合。

  • tempdb に対して実行する場合。この場合、内部的な制約のため、データベース スナップショットは作成できません。

  • WITH TABLOCK オプションを使用する場合。この場合、DBCC ではデータベース スナップショットは作成されず、要求が受け入れられます。

DBCC コマンドを次の対象に実行する場合は、内部データベース スナップショットの代わりにテーブル ロックが使用されます。

  • 読み取り専用のファイル グループ

  • FAT ファイル システム

  • "名前付きストリーム" がサポートされないボリューム

  • "代替ストリーム" がサポートされないボリューム

注意注意

WITH TABLOCK オプションを使用して、DBCC CHECKALLOC を実行する場合、または DBCC CHECKDB の同様な機能を実行する場合は、データベースの排他 (X) ロックが必要です。このデータベース ロックは tempdb または master に対しては設定できず、他のすべてのデータベースでも失敗する可能性があります。

注意注意

DBCC CHECKDB を master に対して実行した場合、内部データベース スナップショットが作成できないと DBCC CHECKDB は失敗します。

DBCC コマンドの進行状況レポート

sys.dm_exec_requests カタログ ビューには、DBCC CHECKDB、DBCC CHECKFILEGROUP、DBCC CHECKTABLE コマンドの実行の進行状況と現在のフェーズについての情報が格納されます。percent_complete 列にはコマンドの完了率が示され、command 列にはコマンド実行の現在のフェーズがレポートされます。

レポートされる進行状況のレベルは、DBCC コマンド実行の現在のフェーズによって異なります。たとえば、フェーズによって、進行状況がデータベース ページ レベルでレポートされる場合と、データベース レベルまたはアロケーション修復レベルでレポートされる場合があります。次の表は、実行の各フェーズと、コマンドでレポートされる進行状況のレベルです。

実行フェーズ

説明

進行状況レポートの単位

DBCC TABLE CHECK

このフェーズでは、データベースのオブジェクトの論理的および物理的な一貫性がチェックされます。

進行状況はデータベース ページ レベルでレポートされます。

進行状況レポートの値は、1,000 データベース ページがチェックされるたびに更新されます。

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

このフェーズでは、データベース システム テーブルがチェックされます。

進行状況はデータベース ページ レベルでレポートされます。

進行状況レポートの値は、1,000 データベース ページがチェックされるたびに更新されます。

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

このフェーズでは、データベースに存在するインデックス付きビューの論理的な一貫性がチェックされます。

進行状況は、チェックされたデータベース ビュー レベルでレポートされます。