MSSQLSERVER_7105

適用対象: SQL サーバー

詳細

属性 Value
製品名 SQL Server
イベント ID 7105
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 TXT_PGNOTEXIST
メッセージ テキスト LOB データ型ノードに対し、データベース ID %d、ページ %S_PGID、スロット %d が存在しません。 このエラーは通常、データ ページ上のコミットされていないデータを読み取れるトランザクションが原因で発生します。 DBCC CHECKTABLE を実行してください

説明

データベース ページ行によって参照されているラージ オブジェクト (LOB) データにアクセスできない場合、クエリでメッセージ 7105 が発生することがあります。

このエラーは重大度レベル 22 であるため、接続はサーバーによって終了されます。 このエラー メッセージは、SQL ERRORLOG ファイルと Windows アプリケーション イベント ログにも、EventID=7105 で書き込まれます。

考えられる原因

このエラーは、次のいずれかの理由で発生するおそれがあります。

  • データベース ページ内またはデータベース ページで参照されている LOB ページ構造内に、データベースの破損の問題が存在します。
  • エラーが発生しているクエリで、クエリ ヒント READ UNCOMMITTED ISOLATION LEVEL または NOLOCK が使用されています。
  • SQL Server エンジン内に問題が存在し、このエラーでクエリが失敗します。

特定の問題の原因と適切な解決策を確認するには、解決方法および「詳細情報」のセクションを参照してください。

ユーザー アクション

  1. メッセージで示されているように、最初に行う必要があるのは、問題が発生したデータベースに対して DBCC CHECKDB を実行するか、テーブルに対して DBCC CHECKTABLE を実行することです。

    • データベース ID は、メッセージで提供されています。

    • DBCC CHECKDB を実行せずに影響を受けたテーブルを正確に調べるには、エラーが発生したクエリによってアクセスされたテーブルを確認する必要があります。 1 つの方法は、SQL Profiler を使用してクエリをトレースすることです。 ただし、SQL Server 2008 (10.0.x) と SQL Server 2008 (10.0.x) R2 では、system_health拡張イベント セッションを使用してクエリを見つけることができます。 system_health セッションの使用方法の詳細については、「 system_health セッションを使用する」を参照してください。

    • データベースの整合性に関する他の問題と同様に、この問題が含まれない既知の正常なバックアップから復元することで、これらのエラーを解決できます。

    • ただし、バックアップから復元できない場合は、DBCC CHECKDB または DBCC CHECKTABLE に対する推奨事項に従って、これらのエラーを修復してください。 これにより、データが失われるおそれがあります。 CHECKDB の使用とデータベース破損の問題の原因の詳細については、「 DBCC CHECKDB によって報告されたデータベース整合性エラーのトラブルシューティング方法」を参照してください。

  2. テーブルにアクセスしているクエリによって分離レベル READ UNCOMMITTED またはクエリ ヒント NOLOCK (ダーティ リードとも呼ばれます) が使用されていたために、このエラーが発生したおそれがあります。

    • DBCC CHECKDB または DBCC CHECKTABLE によって、このテーブルおよび LOB データに関連付けられたエラーが表示されない場合、最も可能性の高い原因はダーティ リードの使用です。 アプリケーションがこれに該当する場合は、ダーティ リードを使用しないようにするか、クエリを再試行する必要があります。

    • これがエラーの原因であることがわかった場合、データベースに実際に整合性の問題が存在することはありません。

詳細

データベースの破損がこの問題の原因である場合は、DBCC CHECKDB または DBCC CHECKTABLE によってエラーが報告されるはずです。 ただし、これらのコマンドによりメッセージ 7105 が報告されることはありません。 CHECKDB によって報告されるエラーは、LOB 構造に対する参照または LOB 構造自体の内部で破損しているものによって異なります。

  • データベース ページの行で有効な LOB ページが正しく参照されていない場合は、次のようなエラーが表示されることがあります。

    メッセージ 8929、レベル 16、状態 1、行 1
    オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039828480 (行内データ型): RID で識別されるデータ レコードによって所有131203072 ID を持つ行外データで見つかったエラー = (1:179:1)
    メッセージ 8964、レベル 16、状態 1、行 1
    テーブル エラー: オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039894016 (型 LOB データ)。 ページ (1:177)、スロット 1、テキスト ID 131203072 の行以外のデータ ノードが参照されていません。
    メッセージ 8965、レベル 16、状態 1、行 1
    テーブル エラー: オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039894016 (型 LOB データ)。 ページ (255:177)、スロット 1、テキスト ID 131203072 の行以外のデータ ノードが、ページ (1:179)、スロット 1 によって参照されていますが、スキャンでは見つかりませんでした

  • 問題のシナリオが異なると、エラーの組み合わせが異なる場合があります。 次の点に注意してください。

    データベース ページ 1:179、スロット 1 は、データベース内の有効なページではない LOB ページを参照しています (ページ 255:177)。 ページ (1:177) は有効な LOB ページですが、どのデータベース ページからも参照されませんでした。 このような状況での問題は、ページ 1:179 のスロット 1 の行で、1:177 ではなくページ 255:177 が参照されていることです。

  • DBCC CHECKDB エラーが LOB ページの問題に関連しているかどうかを判断するための鍵は、"行以外のデータ" と "LOB データ型" という語句を検索することです。

    メッセージ 8929 は、LOB ページを参照しているデータベース ページに関連するエラーです。
    メッセージ 8964 は、LOB ページがどのデータベース ページからも参照されなかったことを示すエラーです。
    メッセージ 8965 は、LOB ページがデータベース ページによって参照されたが、有効なページとして存在しないことを示すエラーです

    この種のエラーに関連する多くの状況では、修復によって LOB データを参照している行と LOB データ自体が削除されます。 修復アルゴリズムにより、問題のデータベース行に影響を与える LOB フラグメントのみの削除が試みられますが、LOB の "ツリー構造" 内で何が壊れているかによっては、それがすべての状況で保証されるとはかぎりません。

  • ここで示す例では、REPAIR_ALLOW_DATA_LOSS を使用する CHECKTABLE によって返されるメッセージは次のようになります。

    修復: オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039828480 (行内データ型)、ページ (1:179)、スロット 1 のレコードを削除しました。 インデックスが再構築されます。
    修復: ID 131203072を持つ行外データ列が削除されました。オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039894016 (型 LOB データ) ページ (1:177)、スロット 1。
    メッセージ 8929、レベル 16、状態 1、行 1
    オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039828480 (行内データ型): RID で識別されるデータ レコードによって所有131203072 ID を持つ行外データで見つかったエラー = (1:179:1)
            エラーは修復されました。
    メッセージ 8964、レベル 16、状態 1、行 1
    テーブル エラー: オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039894016 (型 LOB データ)。 ページ (1:177)、スロット 1、テキスト ID 131203072 の行以外のデータ ノードが参照されていません。
            エラーは修復されました。
    メッセージ 8965、レベル 16、状態 1、行 1
    テーブル エラー: オブジェクト ID 2137058649、インデックス ID 0、パーティション ID 72057594038910976、アロケーション ユニット ID 72057594039894016 (型 LOB データ)。 ページ (255:177)、スロット 1、テキスト ID 131203072 の行以外のデータ ノードが、ページ (1:179)、スロット 1 によって参照されていますが、スキャンでは見つかりませんでした。
            このエラーを修復できませんでした

    Could not repair this error という最後のメッセージは誤解を招くことがあります。 無効なページ (255:177) を参照していたデータベース ページの行が削除されたため、エラーは修復されました。