次の方法で共有


MSSQLSERVER_5180

適用対象: SQL サーバー

詳細

属性 Value
製品名 SQL Server
イベント ID 5180
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 DSK_BAD_FCB_FILEID
メッセージ テキスト データベース '%.*ls' で無効な ID %d のファイル制御ブロック (FCB) を開けませんでした。 ファイルの場所を確認してください。 DBCC CHECKDB を実行します。

説明

SQL Server データベース エンジンによって無効なファイル ID が参照されている場合、クエリまたは操作がエラー 5180 で失敗する可能性があります。 次に例を示します。

メッセージ 5180、レベル 22、状態 1、行 1
データベース '%.*ls' で無効な ID %d のファイル制御ブロック (FCB) を開けませんでした。 ファイルの場所を確認してください。 DBCC CHECKDB を実行します。

重大度 22 のエラーが発生するため、ユーザーのセッションは切断されます。 このエラー メッセージは、SQL Server エラー ログと、EventID = 5180 の Windows アプリケーション イベント ログに書き込まれます。

考えられる原因

SQL Server データベース エンジンは、主にページ ID を参照するときに、さまざまな状況でファイル ID を参照します (ファイル ID はページ ID の最初の部分であるため)。 何らかの理由で、参照されているファイル ID が < 0 であるか、データベース内の有効なファイル ID ではない (sys.database_filesなどのシステム カタログ ビューにリストされている有効なファイル ID に従う) 場合は、5180 エラーが発生する可能性があります。

考えられる原因の 1 つは、格納されているファイル ID が無効であることです。 行内の転送されたレコードは別のページを参照するため、そのページにアクセスしたときにファイル ID が無効である場合は、5180 エラーが発生するおそれがあります。 この状態は、転送されたレコードを含むページでのデータベース破損エラーになります (この例では、DBCC CHECKDB によってメッセージ 8993 が報告されます)。

もう 1 つの例としては、次または前のページ ID のページ ヘッダーに格納されている、ページ ID の一部としての無効なファイル ID が挙げられます。 このフィールドは、クラスター化インデックスのなどの一連のページをリンクするために使用されます。 前のページまたは次のページのファイル ID が無効である場合に、次のページまたは前のページに移動するためにエンジンでこの ID を参照する必要があれば、5180 エラーが発生するおそれがあります (この例では、DBCC CHECKDB によってメッセージ 8981 が報告されます)。

保存されているページ ID が破損しているために問題が無効なファイル ID でない場合、問題は SQL Server データベース エンジン内にある可能性があります。

ユーザー アクション

このエラーが発生した場合は、エラー メッセージに示されているデータベースに対して DBCC CHECKDB を実行する必要があります。 エラーが見つかった場合は、正常だとわかっているバックアップから復元する必要があります。 バックアップから復元できない場合は、DBCC CHECKDB の出力で推奨されているように、その修復オプションを使用することをお勧めします。 ほとんどの場合、この種類のエラーを修復すると、データが失われます。 データベース破損の問題の使用と原因の詳細については、「 DBCC CHECKDB によって報告されたデータベース整合性エラーのトラブルシューティング方法」を参照してください。

DBCC CHECKDB によってエラーが報告されず、問題が引き続き発生する場合は、Microsoft テクニカル サポートにお問い合わせください。 5180 エラーが発生しているクエリを提供できるように準備してください。 エラーが発生したクエリを確認する方法については、「詳細情報」を参照してください。

詳細

ファイル制御ブロック (FCB) は、データベースに関連付けられているファイルに関する重要な情報を追跡する内部メモリ構造です。 ファイル ID は、データベースの FCB を一意に識別するために使用されます。 サーバー エンジンが無効なファイル ID を参照しようとすると、FCB 構造が見つからず、5180 エラー状態がトリガーされます。

このエラーが発生したクエリを確認するには、次の方法を使用します。

  • SQL Server 2008 以降のバージョンでは、system_health セッションにエラーのレコードがあるかどうかを確認します。これにはクエリ テキストを含める必要があります。 system_health セッションの詳細については、「 Supporting SQL Server 2008: the system_health session」を参照してください。
  • SQL Server プロファイラーを使用して、SQL:BatchStartingRPC:Starting、および例外イベントをキャプチャします。 5180 の例外イベントに関連付けられているセッションについて、この例外イベントの前にあるクエリを見つけます。