咨询微信: dbservice1234 7 x 24 在线支持!

    你在这里

オブジェクト破損時の対応:その2(破損ブロックの復旧)(KROWN:135925)

オブジェクト破損時の対応:その2(破損ブロックの復旧)(KROWN:135925)

[概要]
本文書は、ブロック破損が発生した際の破損ブロックの復旧方法について説明し
ます。

破損ブロックの確認、復旧および原因調査について、それぞれ以下の文書を参照
して下さい。

  Document 1746539.1(KROWN:135804) オブジェクト破損時の対応:その1(破損ブロックの確認)
  Document 1746576.1(KROWN:135925) オブジェクト破損時の対応:その2(破損ブロックの復旧)
  Document 1746577.1(KROWN:135926) オブジェクト破損時の対応:その3(原因調査のアプローチ)


[対象リリース]
すべてのリリース


[対象プラットフォーム]
すべてのプラットフォーム


[詳細]

破損ブロックの復旧
==================

  Document 1746576.1(KROWN:135925) オブジェクト破損時の対応:その1(破損ブロックの確認) にて
  確認した SEGMENT_TYPE が INDEX と TABLE で対処方法は異なります。

  1) SEGMENT_TYPE = INDEX の場合

     索引が破損しているケースでは、、drop/create による索引の再作成で対処
     を行うことができます。
      * rebuild では、現在使用しているブロックを再利用するため対処を行う
        ことはできません。
     
     CREATE 文は、dbms_metadata パッケージで確認することができます。

      Document 1721853.1(KROWN:63896) dbms_metadataパッケージの概要と使用例


  2) SEGMENT_TYPE = TABLE の場合
 
     1. RMAN やユーザ管理のバックアップを取得しているケースでは、リカバリ
        を行って下さい。
        なお、RMAN でバックアップを取得している場合には、ブロック単位でリ
        カバリを行うことも可能です。詳細は以下 KROWN を確認して下さい。
 
         Document 1713078.1(KROWN:38393) RMAN 9i新機能: ブロック・メディア・リカバリ(BMR)について
 
     2. 論理バックアップ(exp/imp や csv など)の場合には、オブジェクトを
        再作成しバックアップからデータをロードします。

     3. DBMS_REPAIR パッケージを使用して該当ブロックの読み飛ばしを行う。
        詳細は以下 KROWN を確認して下さい。

         Document 1717045.1(KROWN:48684) DBMS_REPAIRパッケージの使用例

        ※DBMS_REPAIR パッケージは、破損マークがついたブロックに対し
          てのみ有効であり、LOBセグメントに対して使用することはできません。
          詳細は以下 KROWN を確認して下さい。
      
           Document 1717169.1(KROWN:49040) 破損ブロックの扱いについて
   
   バックアップが存在しない場合
   ----------------------------
    バックアップが存在せず、DBMS_REPAIR パッケージが使用できない状況の場
    合には、破損しているオブジェクトから可能な限りデータを取り出して再作
    成を行います

    以下を確認して下さい。

     1. export ユーティリティを使用した復旧

        export ユーティリティでダンプファイルを取得できるか確認します。

         $ exp test/test file=test.dmp tables=test direct=y
     
        * 11g 以降では、Datapump ユーティリティを使用して下さい。

        Document 1737396.1(KROWN:122837) ダイレクト・エクスポート および Data Pump Export にて ORA-1578 が発生しない


     2. CREATE TABLE AS SELECT(CTAS) を使用した復旧

       a. ORA-1578 が発生する場合
   
         event 10231 を設定し、CTAS を実行します。

         SQL> CREATE TABLE TEST_TMP AS SELECT * FROM TEST;

          Document 1706324.1(KROWN:21385) ORA-1578 ブロック破損時の表のデータ取得について (event 10231)


       b. a. が実行できない場合やその他別のエラーが発生する場合
        
          取得しているブロックダンプより破損が発生しているブロックもしく
          は問題の行を特定し、破損している読み飛ばす対象のデータの ROWID 
          を確認します。
          ROWID は、DBMS_ROWID.ROWID_CREATE で確認します。

       SQL> CREATE TABLE TEST_TMP AS SELECT * FROM TEST WHERE ROWID != 'AAAAACAABAAANX0AAD';
       SQL> RENAME TEST TO TEST_BAK;
       SQL> RENAME TEST_TMP TO TEST;
       SQL> DROP TABLE TEST_BAK;

       Document 1731203.1(KROWN:99901) dbms_rowidパッケージを使用して、破損しているブロックのデータを読み飛ばす方法(R8.0以降)


  3) TEMP 表領域での破損

     TEMP 表領域で破損が発生しているケースでは、TEMP 表領域を再作成して
     下さい。

        Document 1722564.1(KROWN:66029) ローカル管理一時表領域のバックアップ、リカバリの方法、および、注意点


  4) ローカル管理表領域のビットマップブロックが破損している場合
     この破損のケースでは、ユーザ管理のバックアップもしくは RMAN で取得し
     たバックアップを使用してリカバリを行って下さい。
     論理バックアップが取得できている場合には、表領域を削除し再作成した後
     にデータのロードを行って下さい。
     バックアップが存在しない場合には、export ユーティリティを使用してデ
     ータを取り出し、表領域を再作成して下さい。