7 x 24 在线支持!
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モードでの運用を
行って下さい。

沪公网安备 31010802001377号