• 12/14/2017
  • 読了22分
    • p
    • M
    • M
    • M
    • P
    • +3
  • に適用される。 SQL Server (サポートされるすべてのバージョン) Azure SQL Database

    次の操作を実行して、指定したデータベースのすべてのオブジェクトの論理的および物理的整合性をチェックします:

    • データベースで DBCC CHECKALLOC を実行します。
    • データベース内のすべてのテーブルとビューに対してDBCC CHECKTABLEを実行します。
    • データベースに対してDBCC CHECKCATALOGを実行します。
    • データベース内のすべてのインデックス付きビューのコンテンツを検証します。
    • FILESTREAM を使用してファイルシステムに varbinary(max) データを格納する場合、テーブルメタデータとファイルシステムのディレクトリおよびファイル間のリンクレベルの整合性を検証します。
    • データベース内の Service Broker データを検証します。

    DBCC CHECKALLOC, DBCC CHECKTABLE または DBCC CHECKCATALOG コマンドは DBCC CHECKDB から個別に実行しなくても良いことを意味します。 これらのコマンドが実行するチェックの詳細については、これらのコマンドの説明を参照してください。

    注意

    DBCC CHECKDBはメモリ最適化テーブルを含むデータベースでサポートされていますが、検証はディスクベースのテーブルに対してのみ行われます。 ただし、データベースのバックアップとリカバリの一環として、メモリ最適化ファイルグループのファイルに対してCHECKSUM検証が行われます。

    メモリ最適化テーブルに対してDBCC修復オプションは使用できないため、データベースを定期的にバックアップし、バックアップをテストする必要があります。 メモリ最適化テーブルでデータ整合性の問題が発生した場合、最後に確認された良好なバックアップから復元する必要があります。

    Transact-SQL Syntax Conventions

    Syntax

DBCC CHECKDB ) ] } ] ] 

SQL Server 2014 以前の Transact-SQL 構文を表示するには、前のバージョンのドキュメントをご覧ください。

引数

database_name | database_id | 0
整合性チェックを実行するデータベースの名前または ID です。 指定しない場合,または0を指定した場合,現在のデータベースが使用されます。 データベース名は識別子の規則に従わなければなりません。

NOINDEX
ユーザーテーブルの非クラスタ化インデックスの集中検査を実行しないように指定します。 これは全体の実行時間を減少させます。 NOINDEXは、整合性チェックが常にシステム・テーブル・インデックスで実行されるため、システム・テーブルには影響しません。

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
DBCC CHECKDBが見つかったエラーを修復するように指定します。 REPAIRオプションは最後の手段としてのみ使用してください。

REPAIR_ALLOW_DATA_LOSS
報告されたすべてのエラーの修復を試行します。 これらの修復は、いくつかのデータ損失を引き起こす可能性があります。

警告

REPAIR_ALLOW_DATA_LOSSオプションは、サポートされている機能ですが、データベースを物理的に一貫した状態にするための最善のオプションとは限りません。 REPAIR_ALLOW_DATA_LOSSオプションが成功した場合、いくつかのデータ損失が発生する可能性があります。

Microsoft では、DBCC CHECKDB によって報告されたエラーから回復するための主な方法として、最終的に知られている良いバックアップからユーザーが復元することを常に推奨しています。 REPAIR_ALLOW_DATA_LOSS オプションは、既知の正常なバックアップからリストアするための代替手段ではありません。 REPAIR_ALLOW_DATA_LOSSオプションを使用してのみ修復可能な特定のエラーでは、エラーをクリアするために行、ページ、または一連のページの割り当てが解除されることがあります。 割り当てを解除されたデータは、もはやユーザがアクセスしたり回復したりすることはできませんし、割り当て解除されたデータの正確な内容を特定することもできません。 したがって、この修復操作の一部として外部キー制約がチェックまたは維持されないため、行またはページが割り当て解除された後、参照整合性は正確でない可能性があります。 REPAIR_ALLOW_DATA_LOSS オプションを使用した後、ユーザーはデータベースの参照整合性を検査(DBCC CHECKCONSTRAINTS を使用)しなければなりません。

修復を実行する前に、このデータベースに属しているファイルの物理コピーを作成します。 これには、プライマリデータファイル(.mdf)、任意のセカンダリデータファイル(.ndf)、すべてのトランザクションログファイル(.ldf)、およびフルテキストカタログ、ファイルストリームフォルダ、メモリ最適化データなど、データベースを形成するその他のコンテナが含まれます。

修復を実行する前に、データベースの状態をエマージェンシー モードに変更し、重要なテーブルからできるだけ多くの情報を抽出してそのデータを保存することを検討してください。

REPAIR_FAST
Backward compatibility のための構文のみを維持します。 修復アクションは実行されません。

REPAIR_REBUILD
データ損失の可能性がない修復を実行します。 これには、非クラスタ化インデックスの欠落行の修復などの迅速な修復や、インデックスの再構築などの時間のかかる修復が含まれます。
この引数はFILESTREAMデータを含むエラーを修復しません。

重要

REPAIR オプションを使用した DBCC CHECKDB は完全に記録され回復可能なので、Microsoft は常に、ユーザーが操作結果を受け入れることを確認できるように、トランザクション内で REPAIR オプション付きの CHECKDB を使用(コマンド実行前に BEGIN TRANSACTION を実行)するように勧めています。 その後、ユーザはCOMMIT TRANSACTIONを実行して、修復操作によって行われたすべての作業をコミットすることができます。 ユーザーが操作の結果を受け入れたくない場合は、ROLLBACK TRANSACTIONを実行して修復操作の効果を元に戻すことができます。

エラーを修復するためには、バックアップからの復元をお勧めします。 修復操作は、テーブル上またはテーブル間に存在する可能性のある制約を一切考慮しません。 指定されたテーブルが1つ以上の制約に関与している場合、修復操作の後に DBCC CHECKCONSTRAINTS を実行することをお勧めします。 REPAIRを使用しなければならない場合は、修復オプションなしでDBCC CHECKDBを実行し、使用する修復レベルを見つけます。 REPAIR_ALLOW_DATA_LOSSレベルを使用する場合は、このオプションでDBCC CHECKDBを実行する前にデータベースをバックアップすることをお勧めします。

ALL_ERRORMSGS
オブジェクトごとに報告されたエラーをすべて表示します。 デフォルトでは、すべてのエラーメッセージが表示されます。 このオプションを指定しても,省略しても効果はありません。 エラーメッセージは、tempdbデータベースから生成されたメッセージを除き、オブジェクトIDでソートされます。

EXTENDED_LOGICAL_CHECKS
互換性レベルが100(SQL Server 2008)以上の場合、インデックス付きビュー、XMLインデックス、および空間インデックス(存在する場合)について論理整合性チェックを実行します。

NO_INFOMSGS
Suppressed all informational messages.

TABLOCK
Cause DBCC CHECKDB to obtain locks instead of using an internal database snapshot.DBCC CHECKDB は、データベースのスナップショットを使用せずにロックを取得するようになりました。 これには、データベースに対する短期排他 (X) ロックが含まれます。 TABLOCKは、高負荷のデータベース上でDBCC CHECKDBをより速く実行しますが、DBCC CHECKDBの実行中にデータベース上で利用可能な同時実行性を減少させます。

重要

TABLOCKは実行されるチェックを制限します; DBCC CHECKCATALOGはデータベース上で実行されず、Service Brokerデータは検証されません。

ESTIMATEONLY
他のすべての指定オプションとDBCC CHECKDBを実行するのに必要となるtempdb空間の推定量を表示します。 実際のデータベース・チェックは行われません。

PHYSICAL_ONLY
チェックをページとレコード・ヘッダーの物理構造の整合性とデータベースの割り当て整合性に限定します。 このチェックは、データベースの物理的整合性の小さなオーバーヘッド・チェックを提供するように設計されていますが、破れたページ、チェックサムの失敗、およびユーザーのデータを危険にさらす可能性のある一般的なハードウェア障害も検出できます。
DBCC CHECKDB の完全実行は、以前のバージョンよりもかなり時間がかかることがありました。 この動作は次の理由で発生します。

  • 論理チェックはより包括的です。
  • チェックされる基本構造のいくつかはより複雑です。
  • 多くの新しいチェックは新しい機能を含むために導入されています。
    したがって、大規模データベースで PHYSICAL_ONLYオプションを使用すると DBCC CHECKDBの実行時間がはるかに短くなることがあり、運用システムで頻繁に使用することが推奨されます。 それでも、DBCC CHECKDB の完全な実行を定期的に行うことをお勧めします。 これらの実行の頻度は、個々のビジネスおよび生産環境に固有の要因に依存します。
    この引数は常にNO_INFOMSGSを暗示し、どの修復オプションでも許可されません。

Warning

PHYSICAL_ONLYを指定すると、DBCC CHECKDBはFILESTREAMデータのすべてのチェックをスキップします。

DATA_PURITY
有効ではないまたは範囲外の列値に対してデータベースをチェックするよう、DBCC CHECKDBに要求されます。 たとえば、DBCC CHECKDBは、datetimeデータ型の許容範囲より大きい、または小さい日付および時刻値を持つ列、または有効ではないスケールまたは精度値を持つ10進数または近似数値データ型列を検出します。
列値の整合性チェックはデフォルトで有効になっており、DATA_PURITYオプションは必要ではありません。 SQL Server の以前のバージョンからアップグレードされたデータベースでは、データベース上で DBCC CHECKDB WITH DATA_PURITY がエラーなく実行されるまで、列値のチェックはデフォルトでは有効にはなりません。 その後、DBCC CHECKDB は列値の整合性をデフォルトでチェックします。 データベースをSQL Serverの以前のバージョンからアップグレードすることでCHECKDBがどのように影響されるかの詳細については、このトピックの後の備考セクションを参照してください。

警告

PHYSICAL_ONLYを指定すると、列-整合性チェックは行われません。

このオプションによって報告された検証エラーはDBCC repairオプションを使って修正することはできません。 これらのエラーを手動で修正する方法については、ナレッジベース記事 923247: Troubleshooting DBCC error 2570 in SQL Server 2005 and later versions.

MAXDOP
Applies to.を参照してください。 SQL Server ( SQL Server 2014 (12.x) SP2 以降 ).

文の sp_configure の最大並列度構成オプションをオーバーライドします。 MAXDOPはsp_configureで設定された値を超えることができます。 MAXDOP がリソース ガバナンスで構成された値を超える場合、SQL Server データベース エンジンは ALTER WORKLOAD GROUP で説明したリソース ガバナンスの MAXDOP 値を使用します。 MAXDOP クエリ ヒントを使用する場合、max degree of parallelism 構成オプションで使用されるすべてのセマンティック ルールが適用されます。 詳細については、並列度の最大値を設定する サーバー構成オプションを参照してください。

Warning

MAXDOP が 0 に設定された場合、SQL Server は使用する並列度の最大値を選択します。

Remarks

DBCC CHECKDB は無効なインデックスを検査しません。 無効なインデックスについての詳細は、無効なインデックスと制約を参照してください。

ユーザー定義型がバイト順であるとマークされている場合、そのユーザー定義型のシリアライズは 1 つだけである必要があります。 バイト順のユーザー定義型のシリアライゼーションが一貫していないと、DBCC CHECKDB を実行したときにエラー 2537 が発生します。 詳細については、ユーザー定義型の要件を参照してください。

Resource データベースはシングルユーザーモードでのみ変更可能なため、DBCC CHECKDB コマンドを直接実行することはできません。 しかし、DBCC CHECKDBがマスターデータベースに対して実行されると、Resourceデータベースに対しても内部的に2つ目のCHECKDBが実行されます。 これは、DBCC CHECKDB が余分な結果を返すことができることを意味します。

SQL Server 2005 (9.x) SP2 から、DBCC CHECKDB を実行しても SQL Server のインスタンスのプランキャッシュがクリアされなくなりました。 SQL Server 2005 (9.x) SP2 より前のバージョンでは、DBCC CHECKDB を実行するとプランキャッシュがクリアされます。 プランキャッシュをクリアすると、それ以降のすべての実行プランが再コンパイルされるため、一時的にクエリパフォーマンスが低下することがありました。

Performing Logical Consistency Checks on Indexes

Logical Consistency Check on Indexes は、データベースの互換性レベルにより、次のように異なります:

  • 互換性レベルが 100 (SQL Server 2008) 以上の場合:
  • NOINDEXを指定しない限り、DBCC CHECKDB は単一のテーブルおよびそのすべての非クラスターインデックスで物理および論理整合性チェックを実行します。 しかし、XMLインデックス、空間インデックス、およびインデックス付きビューでは、デフォルトで物理整合性チェックのみが実行されます。
  • WITH EXTENDED_LOGICAL_CHECKSが指定された場合、インデックス付きビュー、XMLインデックス、および空間インデックスが存在する場合は、論理チェックが実行されます。 既定では、物理的整合性チェックは論理的整合性チェックの前に実行されます。

これらの論理的整合性検査は、インデックス・オブジェクトの内部インデックス・テーブルとそれが参照しているユーザ・テーブルをクロスチェックします。 外れた行を見つけるために、内部クエリが構築され、内部テーブルとユーザー・テーブルの完全な交差が実行されます。 このクエリを実行すると、パフォーマンスに非常に大きな影響を与える可能性があり、その進捗を追跡することはできません。 したがって、物理的な破損とは無関係なインデックスの問題が疑われる場合、またはページレベルのチェックサムがオフにされていて列レベルのハードウェア破損が疑われる場合にのみ、WITH EXTENDED_LOGICAL_CHECKS を指定することをお勧めします。

  • インデックスがフィルターされたインデックスの場合、DBCC CHECKDB はインデックス・エントリーがフィルターの述部を満たすことを検証するため一貫性のチェックを実行します。
  • 互換性レベルが 90 以下の場合、NOINDEX が指定されていなければ、DBCC CHECKDB は単一のテーブルまたはインデックス付きビューとそのすべての非クラスターおよび XML インデックスに対して物理および論理整合性チェックを実行します。 空間インデックスはサポートされていません。
  • SQL Server 2016 からは、高価な式評価を避けるために、永続化された計算列、UDT 列、およびフィルターされたインデックスに対する追加のチェックはデフォルトでは実行されません。 この変更により、これらのオブジェクトを含むデータベースに対するCHECKDBの実行時間が大幅に短縮されます。 しかし、これらのオブジェクトの物理的な整合性チェックは常に完了します。 EXTENDED_LOGICAL_CHECKS オプションが指定された場合のみ、EXTENDED_LOGICAL_CHECKS オプションの一部として既に存在する論理チェック(インデックス付きビュー、XMLインデックス、および空間インデックス)に加えて式評価が実行されるようになる。

データベースの互換性レベルを知るには

  • View or Change Compatibility Level of a Database

Internal Database Snapshot

DBCCチェックはこれらのチェック実行時に必要となるトランザクション一貫性に内部データベース・スナップショットを使用します。 これにより、これらのコマンドを実行する際のブロッキングや同時実行の問題を防ぐことができます。 詳細については、データベーススナップショットのスパースファイルのサイズの表示(Transact-SQL)およびDBCC(Transact-SQL)のDBCC内部データベーススナップショットの使用法セクションを参照してください。 スナップショットを作成できない場合、またはTABLOCKが指定された場合、DBCC CHECKDBは必要な一貫性を得るためにロックを取得します。 この場合、排他的データベースロックは割り当てチェックを実行するために必要であり、共有テーブルロックはテーブルチェックを実行するために必要です。DBCC CHECKDB を master に対して実行すると、内部データベーススナップショットを作成できない場合に失敗します。 これは、パフォーマンス上の理由から、tempdbではデータベース・スナップショットが利用できないためです。 Microsoft SQL Server 2012 またはそれ以前のバージョンの SQL Server では、ReFS フォーマットのボリュームにファイルが配置されているデータベースに対して DBCC CHECKDB コマンドを実行すると、エラーメッセージが表示されることがあります。 詳細については、ナレッジベース記事 2974455: DBCC CHECKDB behavior when the SQL Server database is located on an ReFS volume.

Checking and Repairing FILESTREAM Data

FILESTREAMがデータベースおよびテーブルに対して有効になっていると、オプションでファイルシステムにbinary large objects (BLOBs) を格納することが可能です。 たとえば、テーブルにFILESTREAM属性を使用するvarbinary(max)カラムがある場合、DBCC CHECKDBはファイルシステムのディレクトリとファイル、テーブルの行、カラム、カラム値の間に1対1のマッピングがあるかどうかをチェックします。 DBCC CHECKDBは、REPAIR_ALLOW_DATA_LOSSオプションを指定すると、破損を修復することができます。 FILESTREAM の破損を修復するために、DBCC はファイルシステムのデータが欠落しているテーブル行を削除します。

Best Practices

生産システムで頻繁に使用する場合は、PHYSICAL_ONLY オプションを使用することをお勧めします。 PHYSICAL_ONLY を使用すると、大規模なデータベースでの DBCC CHECKDB の実行時間が大幅に短縮されます。 また、オプションなしで定期的にDBCC CHECKDBを実行することをお勧めします。 これらの実行をどの程度の頻度で行うべきかは、個々の企業やその生産環境に依存します。

Checking Objects in Parallel

DBCC CHECKDBのデフォルトでは、オブジェクトの並列チェックが実行されます。 並列の程度は、クエリ・プロセッサによって自動的に決定されます。 並列度の最大値は、並列クエリと同様に構成されます。 DBCC チェックで使用できるプロセッサの最大数を制限するには、sp_configure を使用します。 詳細については、「最大並列度の構成 サーバー構成オプション」を参照してください。 トレースフラグ2528を使用すると、並列チェックを無効にすることができます。 詳細については、トレースフラグ(Transact-SQL)を参照してください。

注意

この機能は、SQL Serverのすべてのエディションで使用できるわけではありません。 詳細については、SQL Server 2016のエディションでサポートされる機能のRDBMS管理性セクションの並列一貫性チェックを参照してください。

Understanding DBCC Error Messages

DBCCHECKDBコマンドが終了すると、SQL Serverエラーログにメッセージが記録されます。 DBCCコマンドが正常に実行された場合、メッセージには成功とコマンドの実行時間が表示されます。 DBCCコマンドがエラーでチェックを完了する前に停止した場合、メッセージにはコマンドが終了したこと、状態値、コマンドの実行時間が表示されます。 次の表は、メッセージに含めることができる状態値のリストと説明です。

State Description
0 Error number 8930 is raised. これは、DBCCコマンドを終了したメタデータの破損を示します。
1 Error number 8967 was raised. DBCC内部エラーが発生しました。
2 緊急モードデータベース修復中に障害が発生しました。
3 メタデータの破損によりDBCCコマンドが終了しました。
4 アサートまたはアクセス違反が検出されました。
5 不明なエラーが発生し、DBCCコマンドが終了しました。

注意

SQL Serverには、エラーがないデータベース(または「クリーン」一貫性チェック)が実行された日付と時刻が記録されます。 これは last known clean check として知られています。 データベースが最初に起動されたとき、この日付は次のフォーマットで EventLog (EventID-17573) と ERRORLOG に書き込まれます:

CHECKDB for database '<database>' finished without errors on 2019-05-05 18:08:22.803 (local time). This is an informational message only; no user action is required.

Error Reporting

DBCC CHECKDB が破損エラーを検出すると、SQL Server LOG ディレクトリにダンプ ファイル (SQLDUMP*nnnn*.txt) が作成されます。 SQL ServerのインスタンスでFeature Usageデータ収集とError Reporting機能が有効になっている場合、このファイルは自動的にMicrosoftに転送されます。 収集されたデータは、SQL Server の機能を向上させるために使用されます。ダンプファイルには、DBCC CHECKDB コマンドの結果および追加の診断出力が含まれます。 アクセスは、SQL Server サービスアカウントと sysadmin ロールのメンバーに制限されています。 デフォルトでは、sysadmin ロールには Windows BUILTIN\Administrators グループとローカル管理者グループのすべてのメンバが含まれます。 DBCCコマンドは、データ収集プロセスが失敗しても失敗しません。

Resolving Errors

何らかのエラーがDBCC CHECKDBによって報告された場合、REPAIRオプションの1つを使用してREPAIRを実行するのではなく、データベースのバックアップからデータベースを復元することをお勧めします。 バックアップが存在しない場合、repairを実行すると報告されたエラーが修正されます。 使用する repair オプションは、報告されたエラーのリストの最後に指定されます。 しかし、REPAIR_ALLOW_DATA_LOSSオプションを使用してエラーを修正すると、いくつかのページ、したがっていくつかのデータを削除する必要があるかもしれません。

状況によっては、列のデータ型に基づいて有効ではない値や範囲外の値がデータベースに入力されることがあります。 DBCC CHECKDB は、すべての列のデータ型に対して有効でない列の値を検出することができます。 そのため、以前のバージョンの SQL Server からアップグレードしたデータベースで DATA_PURITY オプションを指定して DBCC CHECKDB を実行すると、既存の列値のエラーが明らかになる場合があります。 SQL Server はこれらのエラーを自動的に修復することができないため、列の値を手動で更新する必要があります。 CHECKDB がこのようなエラーを検出した場合、CHECKDB は警告、エラー番号 2570、影響を受ける行を特定しエラーを手動で修正するための情報を返します。

修復は、ユーザーが行った変更をロールバックできるようにユーザー トランザクションで実行することが可能です。 修復がロールバックされた場合、データベースにはまだエラーが含まれているため、バックアップから復元する必要があります。 修復が完了したら、データベースをバックアップしてください。

Resolving Errors in Database Emergency Mode

ALTERDATABASE文を使用してデータベースが緊急モードに設定された場合、REPAIR_ALLOW_DATA_LOSSオプションが指定されていれば、データベースに対していくつかの特別な修復を行うことが可能です。 これらの修復により、通常は回復不可能なデータベースを物理的に一貫性のある状態でオンラインに戻すことができる場合があります。 これらの修復は、最後の手段として、バックアップからデータベースを復元できない場合にのみ使用する必要があります。 データベースが緊急モードに設定されると、データベースはREAD_ONLYとマークされ、ログは無効になり、アクセスはsysadmin固定サーバロールのメンバーに制限されます。

注意

緊急モードではユーザトランザクション内でDBCC CHECKDBコマンドを実行し、実行後にトランザクションをロールバックすることはできません。

データベースが緊急モードで、REPAIR_ALLOW_DATA_LOSS句を指定してDBCC CHECKDBを実行すると、次の動作が行われます:

  • DBCC CHECKDBでは、I/Oまたはチェックサムエラーのためにアクセス不能とマークされたページを、エラーが発生しなかったものとして使用しています。
  • DBCC CHECKDB は、通常のログベースの復旧技術を使用してデータベースの復旧を試みます。
  • トランザクションログ破損のために、データベース復旧が失敗した場合、トランザクションログが再構築されます。 トランザクション ログを再構築すると、トランザクションの一貫性が失われることがあります。

警告

REPAIR_ALLOW_DATA_LOSS オプションは SQL Server でサポートされている機能です。 しかし、データベースを物理的に一貫性のある状態にするための最適なオプションとは限りません。 REPAIR_ALLOW_DATA_LOSS オプションが成功した場合、いくつかのデータが失われる可能性があります。実際、ユーザーが最後に確認された正常なバックアップからデータベースを復元する場合よりも、多くのデータが失われる可能性があります。 REPAIR_ALLOW_DATA_LOSSオプションは、正常なバックアップから復元するための代替手段ではありません。 ログを再構築した後、DBCC CHECKDBが自動的に実行され、物理的な一貫性の問題を報告し修正します。

論理データの一貫性とビジネスロジックで強制される制約は手動で検証する必要があります。

トランザクションログのサイズはデフォルトサイズのままになり、最近のサイズに戻すには手動で調整する必要があります。 しかし、データベースには1つまたは複数のトランザクション不整合が含まれている可能性があります。 DBCC CHECKDBコマンドが失敗した場合、データベースは修復できません。

REPAIR_ALLOW_DATA_LOSS with Replicated Databases

REPAIR_ALLOW_DATA_LOSSオプションでDBCC CHECKDBコマンドを実行すると、ユーザデータベース(出版データベースおよび購読データベース)と複製で使用する配布データベースに影響を及ぼす可能性があります。 パブリケーションデータベースとサブスクリプションデータベースには、発行テーブルとレプリケーションメタデータテーブルが含まれます。 これらのデータベースでは、次の潜在的な問題に注意してください:

  • Published tables. CHECKDB プロセスが破損したユーザー データを修復するために実行したアクションは、レプリケートされない場合があります。
  • Merge レプリケーションでは、公開テーブルへの変更を追跡するためにトリガーを使用します。 CHECKDBプロセスによって行が挿入、更新、または削除された場合、トリガーは起動しません。したがって、その変更はレプリケートされません。 ログリーダーエージェントは、これらの変更をディストリビューションデータベースに移動します。 DBCCの修復の中には、ログは記録されるものの、Log Reader Agentでは複製できないものがあります。 たとえば、CHECKDBプロセスによってデータページが解放された場合、Log Reader AgentはこれをDELETE文に変換しないため、変更はレプリケートされません。 CHECKDBプロセスによって実行される、破損したレプリケーション・メタデータ・テーブルを修復するためのアクションは、レプリケーションを削除して再構成する必要があります。

ユーザー・データベースまたはディストリビューション・データベースでREPAIR_ALLOW_DATA_LOSSオプション付きDBCC CHECKDBコマンドを実行しなければならない場合:

  1. システムを停止してください。 データベースとレプリケーション・トポロジ内の他のすべてのデータベースの活動を停止し、すべてのノードの同期を試行します。 詳細については、レプリケーショントポロジーを停止する(レプリケーションTransact-SQLプログラミング)
  2. DBCC CHECKDBを実行する
  3. DBCC CHECKDBレポートが、配布データベース内のテーブルまたはユーザーデータベース内のレプリケーションメタデータテーブルの修復を含む場合、レプリケーションを削除して再設定してください。 詳細については、パブリッシングとディストリビューションの無効化を参照してください。
  4. DBCC CHECKDBレポートにレプリケートされたテーブルの修復が含まれている場合は、データ検証を実行して、パブリケーションデータベースとサブスクリプションデータベースでデータに違いがあるかどうかを判断します。

結果セット

DBCC CHECKDBでは、次の結果セットが返されました。 ESTIMATEONLY、PHYSICAL_ONLY、またはNO_INFOMSGSオプションが指定されている場合を除いて、値は異なる場合があります。

 DBCC results for 'model'. Service Broker Msg 9675, Level 10, State 1: Message Types analyzed: 13. Service Broker Msg 9676, Level 10, State 1: Service Contracts analyzed: 5. Service Broker Msg 9667, Level 10, State 1: Services analyzed: 3. Service Broker Msg 9668, Level 10, State 1: Service Queues analyzed: 3. Service Broker Msg 9669, Level 10, State 1: Conversation Endpoints analyzed: 0. Service Broker Msg 9674, Level 10, State 1: Conversation Groups analyzed: 0. Service Broker Msg 9670, Level 10, State 1: Remote Service Bindings analyzed: 0. DBCC results for 'sys.sysrowsetcolumns'. There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'. DBCC results for 'sys.sysrowsets'. There are 97 rows in 1 pages for object 'sys.sysrowsets'. DBCC results for 'sysallocunits'. There are 195 rows in 3 pages for object 'sysallocunits'. There are 0 rows in 0 pages for object "sys.sysasymkeys". DBCC results for 'sys.syssqlguides'. There are 0 rows in 0 pages for object "sys.syssqlguides". DBCC results for 'sys.queue_messages_1977058079'. There are 0 rows in 0 pages for object "sys.queue_messages_1977058079". DBCC results for 'sys.queue_messages_2009058193'. There are 0 rows in 0 pages for object "sys.queue_messages_2009058193". DBCC results for 'sys.queue_messages_2041058307'. There are 0 rows in 0 pages for object "sys.queue_messages_2041058307". CHECKDB found 0 allocation errors and 0 consistency errors in database 'model'. DBCC execution completed. If DBCC printed error messages, contact your system administrator. 

DBCC CHECKDBは、NO_INFOMSGSが指定されると次の結果セット(メッセージ)を返します。

 The command(s) completed successfully.

DBCC CHECKDBはPHYSICAL_ONLYが指定された場合、以下の結果セットを返します:

 DBCC results for 'model'. CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

DBCC CHECKDBはESTIMATEONLYが指定された場合、以下の結果セットを返します:

 The command(s) completed successfully.

DBCC CHECKDBはESTIMATEONLYを指します。

 Estimated TEMPDB space needed for CHECKALLOC (KB) ------------------------------------------------- 13 (1 row(s) affected) Estimated TEMPDB space needed for CHECKTABLES (KB) -------------------------------------------------- 57 (1 row(s) affected) DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Permissions

固定サーバロールまたは固定データベースロールのメンバーシップが必要です。 現在のデータベースと別のデータベースの両方をチェックする

次の例では、現在のデータベースとAdventureWorks2012データベースに対してDBCC CHECKDBを実行します

-- Check the current database. DBCC CHECKDB; GO -- Check the AdventureWorks2012 database without nonclustered indexes. DBCC CHECKDB (AdventureWorks2012, NOINDEX); GO 

B. 現在のデータベースをチェックし、情報メッセージを抑制する

次の例は、現在のデータベースをチェックし、すべての情報メッセージを抑制します。

DBCC CHECKDB WITH NO_INFOMSGS; GO 

参照

DBCC (Transact-SQL)
View the Size of the Sparse File of a Database Snapshot (Transact-SQL)
sp_helpdb (Transact-SQL)
System Tables (Transact-SQL)

コメントを残す

メールアドレスが公開されることはありません。