データベースを含むコンピューターで DBCC CHECKDB コマンドを実行するとエラー SQL Server

この記事では、データベースを含むコンピューターでコマンドを実行するときに発生する問題をSQL Server DBCC CHECKDB します。

元の製品バージョン:  SQL Server 2008
元の KB 番号:   960791

現象

次のような状況で問題が発生します。

  • バックアップから 2008 Microsoft SQL Serverまたは 2005 SQL Serverを復元します。

  • 復元プロセス中にエラーが発生し、データベースを復元できません。

  • 同じバックアップからデータベースを正常に復元するには、[バックアップ] オプションをCONTINUE_AFTER_ERRORします。

このシナリオでは、SQL Server データベースを含むコンピューターで DBCC CHECKDB コマンドを実行すると、次のようなエラー メッセージが表示されます。

Msg 8967、レベル 16、状態 216、サーバー <server name> 、行 2
DBCC で内部エラーが発生し、それ以上の処理が妨がりました。 カスタマー サポートにお問い合わせください。
'' の DBCC <database name> の結果。

Msg 8921、レベル 16、状態 1、サーバー <server name> 、行 1

チェックが終了しました。 ファクトの収集中にエラーが検出されました。 スペースが不足している場合や、システム テーブルが矛盾している可能性があります。 以前のエラーを確認します。

さらに、次のようなメッセージがエラー ログにSQL Server可能性があります。

2007-05-26 07:13:49.21 spid58 DBCC は、内部データベース スナップショットの現在のログ LSN ( ) の末尾より LSN が大きいページを検出しました。 <LSN> ページ (ファイル id:page id), database ' , LSN = ( ) を読み取る必要があります。 <database name' (database ID database id> <LSN> 型 = 32、isInSparseFile = 1 です。 この DBCC コマンドを再実行してください。

原因

この問題は、データベースの整合性を確認するために必要なチェックを実行できない場合 DBCC CHECKDB に発生します。 これらのチェックは、多くの理由で実行できませんでした。 たとえば、メタデータの不整合やデータベース スナップショットの破損など、データベースに基本的な不整合がある場合、この動作が発生することがあります。 このエラーの具体的な原因の詳細については、エラー メッセージに表示されるさまざまな状態を調べることで判断できます。 「現象」セクションで説明されているシナリオでは、状態 216 メッセージは、ログ LSN の末尾よりもログ シーケンス番号 (LSN) が大きい内部スナップショットからページを読み取るコマンドを示します。 DBCC CHECKDB この動作は、[データベースの復元] オプションを使用してデータベース を復元CONTINUE_AFTER_ERROR があります。

回避策

この問題を回避するには、コマンドで TABLOCK ヒントを使用 DBCC CHECKDB します。 これにより、エラー DBCC CHECKDB メッセージを生成せずにコマンドを終了できます。

TABLOCK ヒントの詳細については、次の Microsoft Web サイトを参照してください。 ヒント(Transact-SQL) - Table を参照してください