Email: [email protected] 7 x 24 online support!
Oracle NOARCHIVELOGモードでの時間ベースのリカバリでORA-1578が発生
ORACLEデータベース によくあるエラ の解決策
	プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:[email protected]
[質問]
NOARCHIVELOGモードで運用していますが、オンラインREDOログが上書きされる前の
状況であれば、バックアップとオンラインREDOログに存在する情報の範囲で不完全
リカバリが可能ではないかと考えています。
そこで、下記の手順でテストを行いました。
  (1) データベースを正常に停止した状態で、一貫性の取れた全体バックアップを取得
  (2) データベースを起動
  (3) 下記の方法でテーブルの作成
      SQL> create table emp as select * from scott.emp;
  (4) 時間の確認
      SQL> alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';
      SQL> select sysdate from dual;
      SYSDATE
      -------------------
      2002-01-18:10:55:09
  (5) 上記(3)で作成したテーブルの削除
  (6) データベースの停止
  (7) 上記(1)で取得したバックアップから、全データファイルをカレントのデータファ
      イルと置き換える
      (制御ファイルとオンラインREDOログ・ファイルは置き換えません)
  (8) データベースをMOUNT状態にする
      SQL> startup mount;
  (9) 時間ベースのリカバリで上記(4)の時間までの不完全リカバリを実行
      SQL> recover database until time '2002-01-18:10:55:09';
      メディア・リカバリが完了しました。
  (10) データベースをresetlogsオプションでOPENする。
      SQL> alter database open resetlogs;
      データベースが変更されました。
ここまでで、データベースの起動まではできましたが、該当のオブジェクトにアクセス
すると、下記のようなエラーが出力されます。
      SQL> select * from emp;
    エラー行: 1: エラーが発生しました。
    ORA-01578: ファイル番号 1,ブロック番号
    25021でOracleデータ・ブロックに障害が発生しました。
    ORA-01110: データ・ファイル 1 :
    /export/home/rman/ora816c/oradata/tar816c/system01.dbf
    ORA-26040: データ・ブロックがNOLOGGINGオプションを使用してロードされました。
    ※ バージョンによっては、ORA-26040は出力されません。
NOARCHIVELOGモードでの不完全リカバリはできないのでしょうか。
[回答]
NOARCHIVELOGモードでは、メディア・リカバリを実行することを前提としておらず、
インスタンス障害時のインスタンス・リカバリ/クラッシュ・リカバリからの復旧が
可能であることを前提としております。
そのため、オペレーションによっては、ARCHIVELOGモードとNOARCHIVELOGモードとで
生成されるREDO情報が異なる場合があります。
例えば、今回の create table <TABLE_NAME> as select ... というオペレーションは、
NOARCHIVELOGモードの場合にはNOLOGGINGのDIRECT LOAD INSERTが実行されます。
そのため、メディア・リカバリに必要なREDO情報が生成されませんので、メディア・
リカバリで回復することはできなくなります。
当然、回復可能なオペレーションもありますが、本来NOARCHIVELOGモードではメディア・
リカバリを前提とはしておりません。
メディア・リカバリを行う可能性がございましたら、必ずARCHIVELOGモードでの運用を
行って下さい。
