RMANを使用してバックアップを作成および復元しようとしています。作成したバックアップの1つに復元しようとすると、エラースタックトレースが表示されます。エラーは
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 02/01/2016 11:52:10
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 30 and starting SCN of 2586064415
私のバックアップRMANスクリプトは次のとおりであり、パラメーターが正しく入力されているアプリケーションを介して実行されます。
configure channel device type disk clear;
run {{
allocate channel ch1 type Disk FORMAT '{0}\\BCKUP_%U' ;
backup incremental level {1} database plus archivelog tag '{2}' ;
backup spfile FORMAT '{0}\\SPFILE_%U' tag '{2}';
backup current controlfile FORMAT '{0}\\CTRL_%U' tag '{2}';
}}
私の復元スクリプトは:
run{
shutdown immediate
STARTUP FORCE NOMOUNT;
RESTORE CONTROLFILE FROM '...path to control file backup...';
ALTER DATABASE MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
私は最新のバックアップに問題なく復元できますが、以前に作成されたバックアップにもう一歩戻ろうとすると、そのエラーが表示されます。 バックアップを作成するため、または変更する必要がある復元のために、スクリプトに何かありますか?
バックアップによって作成されたファイル:
補足:エラーが発生した後、ALTER DATABASE OPEN RESETLOGS
を実行しました。ただし、問題は、最終的に復元を実行するアプリケーションでエラーメッセージスタックが表示され、失敗した復元として分類されることです。
パラメーター:
\\192.168.xxx.xxx\c$\backups\20160201_104531_INCREMENTAL\
(バックアップタイプに応じて、INCREMENTALまたはONLINE_FULL)0/1
(レベルによって異なる)INC_20160201_104531
(バックアップの種類に応じて、INCまたはFULL)\\192.168.xxx.xxx\C$\BACKUPS\20160201_104814_INCREMENTAL\CTRL_0IQSQVKP_1_1
これは、ホットバックアップからの完全なリカバリを実行しようとする場合、まったく正常です。これは、ホットバックアップが機能するため、バックアップに最新の変更が加えられることはないためです。
バックアップには、シーケンス29までのアーカイブログが含まれています。次の変更はログシーケンス30でしたが、ログシーケンス30はバックアップが終了した時点で現在のREDOログになり、そのためバックアップはありません。これは問題ではありません。これがホットバックアップの仕組みです。最新のログシーケンスのバックアップはありません。明らかに、次のホットバックアップがそれをバックアップしますが、そのバックアップの終わりまでに、別のシーケンスが最新のシーケンスになります。
単にrecover database;
を試すと、Recovery Managerはデータベースを最新の状態に回復しようとしますが、停止する場所がわかりません(アーカイブログだけでなく、REDOログファイルもある場合を除きます)。バックアップの最後のログシーケンスは29です。RMANは、停止する場所がわからないため、次のログシーケンスについて文句を言います。
上記のエラーを回避する場合は、RMANを停止する場所を明示的に指定できます(ポイントインタイムリカバリを実行します)。例えば:
recover database until sequence 30;
これは、エラーをスローせずに、recoverコマンドと同じ結果になります。 UNTIL SCN
およびUNTIL TIME
も指定できます。
30の理由:
ログシーケンスを指定するときに、最後に作成されたアーカイブREDOログにシーケンスnがある場合、RMANがnを適用して停止するようにUNTIL SEQUENCE n + 1を指定します。
または、このエラーを無視してalter database open resetlogs
を続行することもできます。