プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com
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内部的なツールも使用可能である
Comment