7 x 24 在线支持!
Oracle NOARCHIVELOGモードでの時間ベースのリカバリでORA-1578が発生
ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com
[質問] 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モードでの運用を 行って下さい。