Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

謎の5180エラー

edited by DB Online   2014/08/21 00:00

 お客様からエラー5180が発生したとの連絡を受けました。このエラーは、参照しようとしたFCB(ファイルコントロールブロック)のファイルIDが不正だったことを示しています。

エラー5180が発生?

案件の概要

 お客様からエラー5180が発生したとの連絡を受けました。このエラーは、参照しようとしたFCB(ファイルコントロールブロック)のファイルIDが不正だったことを示しています。

 SQL Serverは、データベースファイルに関連する情報をFCBという内部構造体で管理しています。管理している情報には、ファイルハンドルなどがあります。ファイルひとつにつき、ひとつ存在します。

 エラーメッセージは、具体的には次のようなものでした。

エラー: 5180、重大度: 22、状態: 1。
Could not open File Control Bank (FCB) for invalid file ID 0 in database 'tempdb'. Verify the file location. Execute DBCC CHECKDB.

 これは、何らかの処理でファイル操作が必要になり、FCBを参照しようとしたけれどもfile ID 0に紐づくFCBが存在していなかった、というエラーです。File IDの最小値は1なので、FCBを取得しようとしている処理が、誤ったfile IDをキーにしてFCBを取得しようとするとFCBを管理している側のコードにあるバリデーションに引っかかり、このエラーが発生するのです。

 エラーの状況を確認する為、その場でサーバーを少しのぞかせてもらいました。しかし、SQL Serverのエラーログには前述のエラーメッセージ以上の内容は出力されておらず、リングバッファを確認しても既にログが循環していたのか、5180エラーに関するレコードが残っていなくて、何が起きていたのかわかりませんでした。

 以下のKBにもありますが、誤ったfile IDが使われてしまう例として、ファイルが破損してしまっているという可能性があります。例えば、ヒープページにあるforwarded recordは、実際のレコードの代わりにforward先のページIDを持っていることがありますが、この部分が壊れて0になってしまっていると、forward先のファイルを読み込もうとした時にfile IDが0の為このエラーが発生します。

 How to troubleshoot Msg 5180 in SQL Server
 http://support.microsoft.com/kb/2015747

 ただ、ファイルが破損しているような場合、ほかにも破損を示すようなエラーが出力されてもおかしくありません。今回の場合、5180エラー以外に破損を示すようなエラーが発生していないこと、対象のデータベースがtempdbであることから、SQL Serverの不具合である可能性が高いと考えました。

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

バックナンバー

連載:マイクロソフト古賀啓一郎の「今月のケースファイル」

もっと読む

All contents copyright © 2007-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5