リスナーログの肥大化に注意する
listener.log には、リスナー経由の接続情報が出力されていて、
エラー発生時などの調査で参照されるファイル。アラートログなどと同様に
監視対象として設定しておき、通常時はあまり参照されないことも多いはず。
リスナーログをローテーションして切替えたり、不要な過去ログを
退避するような運用が定めていればよいが、何もせず放置していると
膨大なサイズになってしまう。
そこでまず押さえておくべきは、リスナーログファイルの最大サイズだが、
プラットフォームやバージョン、ADR の設定によって異なる。
最大サイズ
・Windows
10g:2GB、11g以降:2GB (ADR 有効なら 4GB)
・Unix/Linux
10g:2GB、11g以降:4GB (ADR 有効なら 無制限)
環境によっては、あっという間にギガに達することもあるので、障害時の取得や
参照に時間がかかってしまう。制限の範囲内で Oracle の仕様上は問題なくても、
肥大したまま利用するのは、非現実的と言える。
一方、log.xml。
こちらは同じディレクトリに log_1.xml、log_2.xml ・・・・ と自動でローテーションされる。
サイズはほぼ10 MB で、このサイズの変更はできない。
従来のテキストログはそのような機能がなく、そのまま肥大していく。
切替方法
リスナーが停止可能なら、手順は至って簡単。
lsnrctl stop コマンドで停止して listenerbk.log などにリネームし、
lsnrctl start コマンドで起動するだけ。新しい listener.ora が作成される。
これが一番安全な手順かと思うが、リスナーを停止せずに切替えなければ
ならない場合は、以下のような方法がある。
カレントリスナーを確認
$ lsnrctl show current_listener
カレントでない場合、対象とするリスナーを設定
$ lsnrctl set current_listener <対象リスナー名>
出力ファイルを切替
$ lsnrctl set log_file listenertmp.log
過去ログを退避
$ mv -i listener.log listenerbk.log
元のカレントリスナー名に戻す
$ lsnrctl set log_file listener.log
ADR有効時は失敗する
ただし ADR が有効の場合はこの方法が失敗してしまう。
色々試してみたところ、使用中のリスナーログをそのままリネームすると、
新たにファイルが自動作成されることが分かった。
リスナーログをリネーム
$ mv -i listener.log listenerbk.log
すると、listener.log が自動作成される。ログの漏れもなさそうだし、
一時ファイルを作成したり戻したりする手間も省けるので、こちらの方が良さそう。
listener.log は、Oracle がずっとつかみっ放しのはずなので、さすがにマズイかと
思ったが、それ以降、自動作成されたファイルに正常出力されているので、問題はないはず。
あとは、log.xml のように、自動ローテーション機能があれば良いのだが、
これはシェルやバッチなどを使って、自前で実装するほかなさそう。