archive log mode運用では容量に注意すべし

今回はoracle dbについて、archive log modeで運用していた場合に遭遇したエラーについて。

archive logモードとは、簡単に言えば、databaseの変更を記録するredoログファイルをアーカイブしたもので、このモードで運用すると、redoログファイルがローテーションによって上書きされる前にアーカイブログとして保存してくれる。

これをすると何が嬉しいかと言えば、databaseに障害が起きた時のリカバリに一役買うのだ。
障害発生前のバックアップ取得時から障害発生直前まで、あるいは限りなくそれに近い状態まで
このアーカイブログとredoログを適用すればdatabaseをリカバリすることができる。

まあ、アーカイブログとredoログが残っていればの話であるが。。。


まあ、便利だと思って書生はこの、archive logモードでdatabase を運用していた。

設定はdatabaseをmount状態にした状態で以下のコマンドでon offできる

--onにする場合
alter database archivelog;

--offにする場合
alter database noarchivelog;


さて、今回はアーカイブログモードにしていたことで起きたエラーについての備忘録。


データベースをいつものように起動しようとしたら、なんとエラーでオープンできない。
気を取り直して以下の手順で一つづつ実行してオープンしようとしたらオープンの段階でエラーが起きた。


--sqlplus / as sysdbaでログインした状態で
-- SGAとバックグラウンドプロセスの起動
startup nomount

--データベースのマウント
alter database mount;

--データベースのオープン
alter database open;
alter database open
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2927
Session ID: 1 Serial number: 3

むむ。アラートログファイルを見てみると

ORA-19815: WARNING: db_recovery_file_dest_size of 4294967296 bytes is 97.37% used, and has 112743936 remaining bytes available.

フラッシュリカバリ領域がいっぱいいっぱいっぽいな。
あ、archive logモードで運用する際に、
特にアーカイブログファイルの出力先を指定しなければ
このフラッシュリカバリ領域に指定されたディレクトリに保存されるのである。


というわけで実際にのぞいてみるとたしかにサイズが最大だった。

[oracle@localhost flash_recovery_area]$ du -h
3.8G

確かに初期化パラメータで設定している値とも一致

show parameter db_recovery_file_dest_size

db_recovery_file_dest_size	     big integer 3882M

応急処置としてサイズを増したらopenできた

alter system set db_recovery_file_dest_size=4G;
--結果
--System altered.

alter database open;
--結果
--Database altered.

archive logモードで運用している際には容量に気をつけよという教訓であった。

Tips
archive logモードかどうかを確認する方法

select log_mode from v$database;