【Oracleデータリカバリ】データブロック損害/ベッドブロック診断

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:[email protected]

ORACLEで現れる中データブロック損害/ベッドブロック診断corruptionがいろいろあるが症状に分けると、だいたいは以下の通り:

  • ORA-01578エラ
  • ORA-600[61xx]エラ
  • ORA-600[3339]あるいはORA-600[3398]
  • ORA-600[2130],ORA-600[2845],ORA-600[4147]エラなど
  • SELECT で誤ったデータを探し出す

 

このようなトラブルに対して、以下のような方法を使ってください:

1、データベースが起動したままであれば、そのブロック損害/ベッドブロックが存在しているデータファイル番号、ブロック番号を判断する必要がある。そして具体的なオブジェクトの位置を探し出す(テーブルあるいはインディクス)。ORA-1578エラあるいはORA-600の変数情報を参考して、以下のようなSQLを使ってください。

 

SELECT tablespace_name, segment_type, owner, segment_nameFROM dba_extentsWHERE file_id = &fileidand &blockid between block_id AND block_id + blocks – 1;

 

2、前のステップに獲得したSEGMENT_TYPEを確認して、以下のSEGMENT_TYPEの場合は再構造できる:

  • index
  • データが獲得できるテーブルあるいは再構造できるテーブル
  • SYSTEMというロールバックセグメントを除いたすべてのロールバックセグメント
  • 順列セグメント, sort segment
  • 一時的なテーブル

 

 

3、 ステップに挙げたものに属していなければ、以下の情報を確認してください:

  • データベースはアーカイブモードか
  • export /sqlldrを含んで、テーブルのバックアップデータがあるか
  • NOT NULLに基づいたインディクスがあるか
  • そのようなインディクスがあれば、UNIUQEか

 

4、前にこのリポジトリに同じようことがあったか。少し経験があるDBAなら、alert.logから大体の事情を把握できる。前に同じことがあれば、引き続きのアドバイスを参考してください。

 

5、アーカイブモードの場合であれば、今後の診断のために、アーカイブredoとオンラインログを格納してください。そうでなければ、すべてのオンラインログを格納してください。

 

6、できれば10210,10211及び10212 eventを作成して、エラの源を捕まえてください。現場エンジニアがOracle自身でトラブルを引き起こしたわけではないと疑っていれば、トラブルがあったデータブロックをダンプして、OS、ストレージ及びボリューム管理器のログの情報を考えて分析してください。メモリー損害であれば、_db_block_cache_protectだと考えてください。けど、すべてのプラットフォームも _db_block_cache_protectを支持しているわけではない。

 

7、ある場合に、同じようなことが再び現れないように、アーカイブモードを使うことを勧めている。

 

必要とする証拠

 

1、 ORACLE TRACEもALERTファイルもこれらのトラブルを診断する源となる。そしてこれらの報告に別のデータブロックに損害を含んでいるかを確認する。

2、OSの視角でこわれたブロックをダンプしてください

Unix: dd if=badfile.dbf count=5 bs=2048 skip=75

 

 

引き続きのアドバイス

 

1、traceあるいはredoログをダンプすることを分析するときに、ユーザーの予想を調整してください:

  • 私たちはリカバリすることではなく、原因を判断することを優先している。
  • すべての証拠があって、決定的な結論を下せない。

 

 

2、時々、メモリーでデータブロックがこわれた、例えばORA-600[3398]、このような状況を検証するために:

  • analyze table X validate structure cascade;
  • alter system flush buffer_cache;
  • OS視角でそのデータブロックをダンプして分析できる

 

後始末処置

 

1、本質を探す、例えば:

  • すべての損害がある設備あるいはコントロールに現れる。
  • 四つのブロックごとに一つのベッドブロックが現れる
  • データブロック自身問題内容が、現れる位置が間違えた
  • データブロックの一部が健康であった、ほかのところに違っている

 

2、 損害/ベッドブロックを避けてテーブルを再構造する:

10231 level 10トランザクションで全テーブルスキャンのCTASを実行する

ROWIDを構造することで、ベッドブロックにアクセスすることを避ける。

 

3、10210、10211及び10212で、そしてデータブロックをアップグレードしてください。10231 eventも考えてください

 

ほかのツール

 

他にもdul、oranum、orapatch、bbedなど、Oracle内部的なツールも使用可能である

 


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *