SQL Server データベースを含むコンピューターで DBCC CHECKDB コマンドを実行するとエラー メッセージが表示される

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

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

現象

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

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

  • 復元プロセス中に、データベースの復元を妨げるエラーが発生します。

  • CONTINUE_AFTER_ERROR オプションを使用して、同じバックアップからデータベースを正常に復元しました。

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

メッセージ 8967、レベル 16、状態 216、サーバー <サーバー名>、2 行目
DBCC で内部エラーが発生したため、それ以上の処理ができませんでした。 カスタマー サポートにお問い合わせください。
"データベース名>" の< DBCC の結果。

メッセージ 8921、レベル 16、状態 1、サーバー <サーバー名>、1 行目

チェックは終了しました。 ファクトの収集中にエラーが検出されました。 tempdb の領域が不足しているか、システム テーブルに一貫性がない可能性があります。 前のエラーを確認します。

さらに、次のようなメッセージがSQL Serverエラー ログに表示される場合があります。

2007-05-26 07:13:49.21 spid58 DBCC は、内部データベース スナップショットのログ LSN (<LSN) の現在の末尾より大きい LSN> を持つページを検出しました。 ページ (ファイル ID:ページ ID)、データベース '<データベース名' (データベース ID データベース ID>)、LSN = (<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) - テーブル