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 データベース エンジンで作成される内部の読み取り専用データベース スナップショットに対して実行でき、コマンド実行時のブロックや同時実行の問題を回避できます。詳細については、「データベース スナップショット」を参照してください。
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 コマンドの進行状況レポート
SQL Server 2005 では、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
このフェーズでは、データベースに存在するインデックス付きビューの論理的な一貫性がチェックされます。
進行状況は、チェックされたデータベース ビュー レベルでレポートされます。
情報ステートメント
検証ステートメント
|