• 締切済み

DBCC CHECKDBのエラーについて

SQL Serverの保守計画について質問です。 真夜中に保守計画を動かしているシステムがあるのですが、 以下のようなエラーが発生しました。 クエリ "DBCC CHECKDB WITH NO_INFOMSGS" の実行が次のエラーで失敗しました: "オブジェクト ID 321578567、インデックス ID 0、パーティション ID 72057597094199296、 アロケーション ユニット ID 72057597100556288 (型 In-row data) のページ (1:734549) の PFS 空き領域情報が不適切です。予想値 0_PCT_FULL、実際の値 95_PCT_FULL。 CHECKDB により、テーブル 'D出庫予定データ' (オブジェクト ID 321578567) に 0 個のアロケーション エラーと 1 個の一貫性エラーが見つかりました。 CHECKDB により、データベース 'AAAdb' に 0 個のアロケーション エラーと 1 個の一貫性エラーが見つかりました。 repair_allow_data_loss は DBCC CHECKDB (AAAdb) で見つかったエラーの最小修復レベルです。"。 考えられるエラーの理由: クエリに問題がある、"ResultSet" プロパティが正しく設定されていない、 パラメータが正しく設定されていない、または接続が正しく確立されていない。 整合性チェックでエラーが出ているのは分かるのですが、 具体的な解決策がよく分かりません。 何かアドバイスがいただければ、嬉しいです。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

PFSはGAMやSGAMと同じくシステムの内部情報ですので、通常意図的にこのような不整合を生じさせることはできないはず。。 ちなみにSQL Server 2005のSPはいくつですか? 以下のサイトによれば、SQL Server 2005 SP2までにはPFSのバグらしきものがあったようです。 http://www.sqlskills.com/BLOGS/PAUL/post/Corruption-bug-that-people-are-hitting-Msg-8914-PFS-free-space.aspx 直接関係あるかはわかりませんが、この内容だと主にBULK処理の場合に発生する可能性がありそうですね。

sd_kouchi
質問者

お礼

なるほど! ちなみにSPは当たってないというひどい状態でした。 ってことで、最新のSPを当てることにしました。 わざわざありがとうございました。 本当に助かりました!

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

DBCC CHECKDBには修復オプションがあります。 保守計画ということはSQL Server2000ですよね。 http://technet.microsoft.com/ja-jp/library/aa258278(SQL.80).aspx 1) DBCC CHECKDB (AAAdb,REPAIR_FAST) 2) DBCC CHECKDB (AAAdb,REPAIR_REBUILD) 3) DBCC CHECKDB (AAAdb,REPAIR_ALLOW_DATA_LOSS) 今回のメッセージでは"repair_allow_data_loss は DBCC CHECKDB (AAAdb) で見つかったエラーの最小修復レベルです"と出ているので、3)でないと直らないかもしれませんが、1)2)はデータロストの可能性はないのに対し、3)は不整合データをページレベルで削除して整合性を確保するため、データロストの可能性があります。 したがって、既にアドバイスがあるように可能ならばリストアが無難です。 ただ、今回のケースでは'D出庫予定データ'に不整合があると判明しているため、正しいバックアップがない場合は修復を実行して、データロストをチェックするというアプローチもありかもしれません。 なお、修復オプションはデータベースをシングルユーザモードに変更してからでないと実行できません。 ALTER DATABASE AAAdb SET SINGLE_USER GO (修復) ALTER DATABASE AAAdb SET MULTI_USER GO

sd_kouchi
質問者

お礼

御回答ありがとうございます。 SQL Serverは2005です。 データは不整合だった分は、確かにバッサリ 削除されてました。 御回答いただいた方法で一度、修復をしてみます。 ただ、このような不整合が起きる根本原因って どんなことが考えられるでしょうか? 今回のエラーが出たテーブルは、 毎日数万件のデータを作成し、更新し、 1日の終わりの締め処理でテーブルを空っぽにするような テーブルなんです。 そのようなテーブルは他にもあるんですが、 同じようなテーブルは、このエラーがたまに発生します。

回答No.1

「空き領域情報が不適切です」というのがあるので、 まずはディスクの空きが十分にあるか。およびデータファイルの空きが十分か(自動拡張が設定されてればこのエラーに関しては気にしなくていいかも)を確認かも。 で、一番無難なのが、多分データベースを一度バックアップとって復元すること。領域関連のエラーっぽいので、バックアップ→復元で作り直せば戻せそう。 その場合、念のために一度サービスを落とすかでタッチするかして、MDF、LDFのファイルをコピーしておいたほうがいいかも知れません。

sd_kouchi
質問者

お礼

御回答ありがとうございます。 このPFS 空き領域情報というのがSQL Server上の どこを見れば分かるのかを理解してないので、 エラー原因がつかめない状況です。 できれば、エラー原因を知りたいです。 ちなみにSQL Serverは2005です。 一応、解決策としては、復元もしくは、 該当のテーブルをDrop→Createをしようと 思っています。

関連するQ&A