RMANを使用してデータベースを復元する際に問題が発生しました。 1週間ごとにデータベースの完全バックアップを実行するスクリプトがあります。ログは、バックアップが正しく作成されたことを示しています。
set Oracle_SID=MY_DB
set LOGFILE=path/full_%DATE%.log
set CMDFILE=path/restore.config
rman target / nocatalog cmdfile=%CMDFILE% msglog %LOGFILE%;
restore.config
run {
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup as compressed backupset incremental level 0 database format '\\path\data_%Y_%M_%D.%U';
backup as compressed backupset archivelog all delete all input format '\\path\archive_logs_%Y_%M_%D.%U';
backup as compressed backupset current controlfile format '\\path\control_files_%Y_%M_%D.%U';
backup as compressed backupset spfile format '\\path\spfile_%Y_%M_%D.%U';
CROSSCHECK BACKUP;
delete noprompt obsolete recovery window of 0 days;
}
バックアップファイルは別のサーバーにあります。バックアップからデータベースを復元するためのファイルを用意しました。
run {
shutdown immediate;
startup mount;
catalog start with 'path to dump files';
restore database;
recover database;
alter database open;
}
このコマンドの後、次のエラーが発生します。
unable to find archived log
archived log thread=1 sequence=13407
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/26/2016 12:16:26
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 13407 and starting SCN of 111916667960
Recovery Manager complete.
次に、スクリプトを作り直しましたが、役に立ちませんでした。
run {
shutdown immediate;
startup nomount;
restore controlfile from 'path to control file';
shutdown immediate;
startup mount;
catalog start with 'path to dumps\';
restore database;
recover database;
alter database open resetlogs;
}
そして今、私はこのエラーがあります:Oracleエラー:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: 'Path to db\SYSTEM01.DBF'
ベースを作成し、バックアップを作成してから復元しようとすると、これらのコマンドが機能することを追加します。
なぜそれが機能しないのか、そしてこのバックアップからデータベースを復元するにはどうすればよいのか、誰かが私に説明できますか?
どちらのエラーも、メディアリカバリを完了し、データファイルを一貫した状態にするために、より多くのアーカイブログが必要であることを示しています。
データファイルが使用可能なREDOデータよりも新しい場合は、別の方法として、データファイルの古いバックアップを取得し、そこから最新のバックアップ実行からのREDOデータを処理します。一般的な戦略は、バックアップの合間にアーカイブログをバックアップ先に継続的に送信することです。これにより、次にスケジュールされたバックアップに至るまでのデータの損失を最小限に抑えることができます。
独立して一貫性のあるバックアップセットを取得することを目的とする場合は、バックアップの実行中に生成されたすべてのREDOだけでなく、すべてのデータファイルをキャプチャする必要があります。この一連のバックアップ操作のようなものをお勧めします。
run{
backup database ;
sql 'alter system switch logfile';
sql 'alter system archive log current';
backup archivelog all ;
}
最初にデータベースのバックアップを完了し、次にアーカイブプロセスをトリガーする前に次のロググループに強制的に切り替え、最後にアーカイブされたログのバックアップを開始する方法に注意してください。これらのログには、このバックアップセットから復元されたファイルに対してメディアリカバリを実行するために必要なREDOデータが含まれる可能性がはるかに高くなりました。
更新:
現在の状況で、これが実際に処理する必要のあるすべてのデータである場合は、手動で不完全なメディアリカバリを実行し、リセットログで開くふりをして、ORA-1547をバイパスできるはずです。
STARTUP FORCE MOUNT
RECOVER DATABASE UNTIL CANCEL;
CANCEL;
ALTER DATABASE OPEN RESETLOGS;