本番データベースを別のデータベースに複製しています。定期的にCLONEDB
としましょう。次のようなrman duplicate database
スクリプトを使用しています。
run {
duplicate target database to CLONEDB
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
SET ....
DB_FILE_NAME_CONVERT=....
LOGFILE
GROUP 1 (
....
) SIZE 100M,
....
;
}
スクリプトを実行する前に、CLONEDBのアーカイブログrmanバックアップ(バックアップされたアーカイブログを削除します)とDROP DATABASE CLONEDB
を実行しています。
duplicate database
の実行中、rmanはソースデータベースからデータファイルとアーカイブログをコピーします。たとえば、そのようなファイルがコピーされたことがわかります。
input archived log thread=1 sequence=666 ...
output file name=+DYSK/archivelog/2015_01_16/thread_1_seq_666
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01
次に、rmanは(set until scn 666666; recover clone database delete archivelog;
を介して)データベースを回復するため、上記のアーカイブログがデータベースに適用されます。
starting media recovery
archived log for thread 1 with sequence 666 is already on disk as file +DYSK/archivelog/2015_01_16/thread_1_seq_666
archived log file name=+DYSK/archivelog/2015_01_16/thread_1_seq_666 thread=1 sequence=666
media recovery complete, elapsed time: 00:00:02
Finished recover at 2015.01.16 16:21:57
Oracle instance started
すべてが正常で、データベースが起動し、ユーザーは満足しています。ただし、archivelogファイル(この例ではthread_1_seq_666
)はディスクに残ります。また、rmanは複製プロセス後にデータベースのインカネーションを変更するため、このファイルは前のインカネーションに由来するため、バックアッププロセス中に削除されることはありません。
時々私はハウスキーピングを行い、孤立した古いアーカイブログをディスクから直接削除する必要があります。もちろん、複製スクリプトを使用して、自動的に実行したいと思います。古いファイルに対してrm
からasmcmd
コマンドを追加することもできますが、duplicate database
の実行中にrmanにそれを実行させる方法があるかもしれません
duplicate database ... from active database
は、既存のバックアップなしで機能するように設計されています。 Oracleがクローンプロセス中に使用されたアーカイブログをクリーンアップすると期待します。
したがって、これは予期しない動作です。 Oracleでサービスリクエストを記録してみてください。
クローン処理後にアーカイブログをクリーンアップする必要があったかどうか思い出せません。まあ、私は何もチェックしなかったので、dbクローン後にアーカイブログを削除したことはなかったと言えます。クローンを作成することはほとんどありませんfrom active database
。私は通常、プライマリデータベースに接続せずにバックアップ場所からクローンを作成します。私はどういうわけかそれを好みます。
回避策として、後でスクリプトを使用してそれらを削除します。
Control_file_record_keep_timeの値を増やしてみてください。データベースを削除する前に、アーカイブログとバックアップを強制的に削除してみることもできます。
SQL> show parameter control_file_record_keep_time
NAME TYPE VALUE
-------------------------------- --------- ------
control_file_record_keep_time integer 7