• 締切済み

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

  • Access #エラーについて

    Access初心者です。 よろしくお願いいたします。 [前提]  テーブルA のIDに紐づけてクエリBの数値をクエリCで反映させたい。  〈詳細データ〉   ・テーブルA    [ID] [名称]       1   あ     2   い     3   う     4   え     5   お   ・クエリB    [ID] [数値]     2   10     3   20     5   40   ・クエリC    [ID]  [名称] [数値]     1    あ  #エラー     2    い   10     3    う    20     4    え  #エラー     5    お   40   ・”テーブルAの[ID]”の全レコードと”クエリBの[ID]”の同じ結合フィールドだけを含めてリレーションを行っている。    ・クエリCの算式: IIf(IsError([クエリB].[数値]),0,[クエリB].[数値])  [質問]    ・クエリCの『#エラー』部分を0にしたいのですが、何か良い方法はございませんでしょうか。   ・そもそも上記のロジックは無理がありますでしょうか。    アクセスはあまりいじったことがございません。ご回答いただけますと幸いです。   よろしくお願いいたします。

  • 下記エラーのHDDの信頼性はどの程度でしょうか?

    WindowsXPにて、chkdsk i: /fを行ったところ、 「ファイル 9 のインデックス $SII へ ID 256 のインデックス エントリを挿入しています。」 というメッセージが大量に出ました。詳細は下記。 このエラーのある、HDDの信頼性はどの程度でしょうか? 一応、サブマシーンのCディスクなので再度同じ様なエラーが出ると、セットアップしなおす必要があり、意外と面倒だったりします。 ただ、稼働率の非常に低いPCなのでHDDの買い換えにも悩むところです。 こういったエラーの出たHDDを使われている方のお話が聞ければ幸いです。 宜しくお願い致します。 CHKDSK はインデックスを検査しています (ステージ 2/3)... ファイル 9 のインデックス $SII のエラーを修復します。 ファイル 9 のインデックス $SII を並べ替えます。 インデックスの検査を完了しました。 CHKDSK はセキュリティ記述子を検査しています (ステージ 3/3)... ファイル 9 のインデックス $SII へ ID 256 のインデックス エントリを挿入しています 省略(この部分が大量にあります) ファイル 9 のインデックス $SII へ ID 296 のインデックス エントリを挿入しています セキュリティ ファイル レコード セグメントを修復しています。 ファイル 9 のインデックス $SII から使用されていない 4 インデックス エントリを消去しています。 ファイル 9 のインデックス $SDH から使用されていない 4 インデックス エントリを消去しています。 4 未使用のセキュリティ記述子を消去しています。 セキュリティ記述子のデータ ストリームのミラー コピーを修復しています。 セキュリティ記述子の検査を完了しました。 ボリューム ビットマップ エラーを修復します。 ファイル システムを修正しました。 244196000 KB : 全ディスク領域 221646232 KB : 168983 個のファイル 62728 KB : 18727 個のインデックス 0 KB : 不良セクタ 261996 KB : システムで使用中 65536 KB : ログ ファイルが使用 22225044 KB : 使用可能領域 4096 バイト : アロケーション ユニット サイズ 61049000 個 : 全アロケーション ユニット 5556261 個 : 利用可能アロケーション ユニット

  • Access クエリでレコードセット作成

    Access2010でVBAを勉強しています。クエリオブジェクトからレコードセットを作れるかお教えください。 クエリのデザイン作成で3つのテーブルからデータを抽出するクエリを作りました。 このクエリオブジェクトからレコードセットを作りたいと思っていますが、作り方がわかりません。 よってクエリオブジェクトのSQLビューでSQLを確認し、VBAの中で下記のようにSQLを作ってレコードセットを作っています。 これだと効率が悪いので、クエリオブジェクトから直接レコードセットがつくれないかと思っています。 方法がありましたらお教え下さい。よろしくお願いします。 strSQL = "SELECT master.[サイズ], master.単価," strSQL = strSQL & "Nz([入庫数量の合計])-Nz([出庫数量の合計]) AS 在庫数" strSQL = strSQL & " FROM (master LEFT JOIN Q_出庫 ON master.[サイズ] = Q_出庫.[サイズ])" strSQL = strSQL & " LEFT JOIN Q_入庫 ON master.[サイズ] = Q_入庫.[サイズ]" objADORS.Open "T_出庫", objADOCON, adOpenDynamic, adLockOptimistic

  • キーワードランキングAPI(yahoo!)について

    API初心者です。yahoo!ショッピングが公開しているキーワードランキングAPIについて質問させてください yahoo!ショッピングでネットショップを運営しているのですが、seo対策の一環で旬なキーワードの動向はつねに把握したいと考えています。 こちらのAPIを使えばYahoo!ショッピングで検索されている人気の検索キーワード情報を取得できるという事で使い方を把握しようと自分なりに奮闘しました↓ http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/queryranking.html なんとか頑張ってキーワードの順位を取得する事には成功したのですが、データの集計開始日と集計終了日を指定する方法がどうしても分かりません。以下のソースにどのような記述を付け足せば任意のデータ集計期間の情報を取得できるようになるのでしょうか? <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>爆速JSONP</title> </head> <body> <script src="http://i.yimg.jp/images/yjdn/js/bakusoku-jsonp-v1.js" data-url="http://shopping.yahooapis.jp/ShoppingWebService/V1/json/queryRanking" data-p-appid="アプリケーションID" data-p-category_id="検索キーワードの動向を知りたいカテゴリ" > 1位 {{#ResultSet}} {{#0}} {{#Result}} {{#1}} {{Query}} {{/1}} {{/Result}} {{/0}} {{/ResultSet}} <br> 2位 {{#ResultSet}} {{#0}} {{#Result}} {{#2}} {{Query}} {{/2}} {{/Result}} {{/0}} {{/ResultSet}} <br> 3位 {{#ResultSet}} {{#0}} {{#Result}} {{#3}} {{Query}} {{/3}} {{/Result}} {{/0}} {{/ResultSet}} <br> 4位 {{#ResultSet}} {{#0}} {{#Result}} {{#4}} {{Query}} {{/4}} {{/Result}} {{/0}} {{/ResultSet}} <br> 5位 {{#ResultSet}} {{#0}} {{#Result}} {{#5}} {{Query}} {{/5}} {{/Result}} {{/0}} {{/ResultSet}} </script> </body> </html> お詳しい方のアドバイスを拝借したいと思い質問させていただきました。よろしくお願い致します。 m(_ _)m

    • ベストアンサー
    • PHP
  • Accessでの引き算

    アクセス初心者です。どなたか教えてください。 Windows XP Access 2003の環境です。 このようなデータがあります。 データ 商品ID  商品名  入庫  出庫   001   AAA    3    1   xxx xxx これをクエリーで在庫数を出したいのですが、私のやり方ではこのようになってしまいます。 商品ID  商品名  入庫  出庫  在庫 001   AAA     3       3 001   AAA          1  1   どこを直せばちゃんと一行で在庫が2と出てくれますか? すみません。教えてください。 宜しくお願い申し上げます。

  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • javascriptにてXMLの読み込み

    yahooの日本語係り受け解析を使って解析を行おうと思っています。 <ResultSet xsi:schemaLocation="urn:yahoo:jp:jlp:DAServicehttp://jlp.yahooapis.jp/DAService/V1/parseResponse.xsd">  -<Result>   -<ChunkList>    -<Chunk>     <Id>0</Id>     <Dependency>1</Dependency>     -<MorphemList>      -<Morphem>       <Surface>こんな</Surface>       <Reading>こんな</Reading>       <Baseform>こんな</Baseform>       <POS>形容動詞</POS>       <Feature>形容動詞,形動特殊,*,こんな,こんな,こんな</Feature>      </Morphem>     </MorphemList>    </Chunk>    -<Chunk>     <Id>1</Id>     <Dependency>2</Dependency>     -<MorphemList>      -<Morphem>       <Surface>私</Surface>       <Reading>わたし</Reading>            ・            ・            ・ リクエストを送るとこのような形で返ってくるのですが、IdとDependencyの値は取れるのにSurfaceの値が取れません。 JKL.ParseXMLを使っています。 処理部分↓ var http = new JKL.ParseXML("http://jlp.yahooapis.jp/…  //リクエスト&オブジェクト var data = http.parse(); //解析 var kai = data["ResultSet"]["Result"]["ChunkList"]["Chunk"]; //この後 kai["Id"]で値は取れます。 var kai2 = data["ResultSet"]["Result"]["ChunkList"]["Chunk"]["MorphemList"]["Morphem"];  //ここでエラーが出ます。 MorphemがNullまたはオブジェクトではないと表示されるんですが… ブラウザはIEです。 どなたかご教授お願いします。

  • ResultSetオブジェクトのメソッドについて

    AccessでつくったRDBにJDBCで接続してデータを表示させたいのですが、ResultSetオブジェクトのprevious()メソッドやfirst()メソッドを使うとうまくいまず困ってます。 下記のプログラムを実行するとエラーになります。 ------------------------------------------------ (省略) int r = 0; while(resultset.next()){ r++; } while(resultset.first()){ } ------------------------------------------------ 又は ------------------------------------------------ (省略) int r = 0; while(resultset.next()){ r++; } while(resultset.previous()){ String 変数名 = resultset.getString("フィールド名"); // タイトル名を取得/ (省略) ------------------------------------------------ エラー ----------------------------------------------- javax.servlet.ServletException: Result set type is TYPE_FORWARD_ONLY ----------------------------------------------- #カーソルのバックはできない? next()メソッドを使った後に、取得したデータの処理はどの様にすればよいのかがわかりません。 ご教授お願いします。

    • ベストアンサー
    • Java
  • 更新クエリが実行できず、困っています。

    以前こちらで、更新クエリについて教えて頂きましたが、 実行できず、困っています。 在庫クエリで計算した在庫数を、部品マスタの現在庫に代入する 更新クエリを実行すると、 「更新可能なクエリでなければなりません」とエラー表示されます。 UPDATE T_部品マスタ AS A INNER JOIN Q_在庫 AS B ON A.部品品番=B.部品品番 SET A.現在庫 = B.在庫数; と作成しました。 以下に、作成したデータベースを書き出してみます。 どこが悪いのか、ご指摘頂ければ幸いです。 よろしくお願いします。 部品分類テーブル 部品分類ID(主キー) 部品分類名 保管場所テーブル 保管場所ID(主キー) 保管場所 部品マスタテーブル(T_部品マスタ) 部品品番(主キー) 部品分類ID 保管場所ID 部品名 現在庫 入出庫テーブル 入出庫ID(オートナンバー) 日付 部品品番 入庫数量 出庫数量 入出庫テーブルを元にクエリを作る 入庫クエリ 部品品番 入庫数量の合計 出庫クエリ 部品品番 出庫数量の合計 在庫クエリ(Q_在庫) 部品品番(部品テーブル) 部品名(部品テーブル) 入庫数量の合計(入庫クエリ) 出庫数量の合計(出庫クエリ) 在庫数(nz([入庫数量の合計])-nz([出庫数量の合計])

  • 2種類のクエリの一部だけを合体する方法を教えてください

    こんにちわ。 Access初心者のにとろさろんと申します。 こういうことができるかどうかも、よくわからないのですが、 以下のことをしたいのですが、可能かどうか、また、可能であれば どのような操作方法があるか、教えていただけないでしょうか。 ●2種類のクエリに入っている、ひとつのデータ列だけをそれぞれまるごとひっぱってきて、別の新規クエリに、ひとつのデータ列として 合体させたいのですが、可能でしょうか。  例えば、Aというクエリの「ID」という縦のデータ列全部(テキスト型)と、Bというクエリの「ID」という縦のデータ列全部(テキスト型)をCという新規クエリに、「ID」というフィールドを作成し、 そこへ、表示させ、Aというクエリの「ID」データ+Bというクエリの「ID」データ=Cというクエリの「ID」データ、というものを作りたい のです。 選択クエリで試しに作ってみたのですが、「式が一致しません」など エラーがでて、作成できませんでした。 基本的な質問かもしれず申し訳ありませんが、どなたか教えていただけないでしょうか。 どうぞよろしくお願いいたします。