Oracleデータベースでは、トランザクションのリカバリを可能にするためにアーカイブログを使用しますが、アーカイブログが蓄積されるとディスク容量を圧迫する要因にもなります。
特にアーカイブログモードで運用している環境では、定期的な削除を自動化することで、ストレージ不足による障害を未然に防ぐことが重要です。
本記事では、RMANを使ってアーカイブログを自動削除する方法について解説します。
アーカイブログ削除の基本構文
RMANを使えば、条件を指定してアーカイブログを安全に削除することができます。基本的な構文は以下の通りです。
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-1';
この例では、1日以上前のアーカイブログを削除します。
また、バックアップ済みのものに限定して削除するには以下のようにします。
DELETE ARCHIVELOG ALL BACKED UP 1 TIMES TO DISK;
このようにすることで、少なくとも1回バックアップされたログのみを削除するため、安全性を保ちながら容量を確保できます。
アーカイブログの削除をスケジューリングする
アーカイブログの自動削除は、定期的に実行されるようスケジューリングするのが理想です。Unix/Linux環境であれば、cron
を使ってRMANスクリプトを毎日実行することができます。
まず、RMANスクリプトファイル(たとえばdelete_archivelog.rman
)を作成します。
run {
delete noprompt archivelog all backed up 1 times to disk;
}
次に、以下のようなシェルスクリプトを作成してRMANを実行します。
#!/bin/bash
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH
rman target / cmdfile=/home/oracle/scripts/delete_archivelog.rman log=/home/oracle/scripts/delete_archivelog.log
このスクリプトをcron
で毎日深夜に実行するように設定すれば、自動化が完了します。
0 2 * * * /home/oracle/scripts/delete_archivelog.sh
削除対象を確認してから実行する
削除を行う前に、どのアーカイブログが対象になるのか確認したい場合はDELETE
の代わりにCROSSCHECK
やREPORT OBSOLETE
、LIST ARCHIVELOG ALL
などを使用すると安全です。
たとえば以下のように確認可能です:
LIST ARCHIVELOG ALL;
REPORT OBSOLETE;
注意点
- 削除対象は必ずバックアップが完了していることを確認してください。
- ストレージ容量が急速に減少するシステムでは、短い間隔での自動実行が推奨されます。
- Data Guard構成下ではスタンバイ側との整合性に注意が必要です。
まとめ
アーカイブログはRMANの機能を活用することで、安全かつ効率的に自動削除できます。
特に以下の構成が推奨されます:
- 「バックアップ済み」+「一定期間前」のログだけ削除
- スクリプト化してcronなどで定期実行
- 削除前に確認ログを出力して安全を確保
定期的なアーカイブログの削除を自動化することで、障害リスクを抑えつつ、快適な運用を継続できます。