リスナー・ログ
Oracle Database 19cから、リスナーのログファイルに自動ローテーション機能が付きました。この機能はデフォルトで有効になっています。ログファイルが一定サイズになると自動的に番号が付いたセグメント・ファイルが生成され、古いファイルを自動削除することができます。
$ cd $ORACLE_BASE/diag/tnslsnr/dbsrv-1/listener/trace
$ ls -li
total 2028
5796100 -rw-r-----. 1 oracle oinstall 529985 Nov 17 10:34 listener_1.log
6092293 -rw-r-----. 1 oracle oinstall 540743 Nov 17 10:38 listener_2.log
6092294 -rw-r-----. 1 oracle oinstall 540155 Nov 17 10:41 listener_3.log
6092295 -rw-r-----. 1 oracle oinstall 347884 Nov 17 10:43 listener.log
ファイル名の番号はalertディレクトリのXML形式のファイルにも付きます。
$ cd $ORACLE_BASE/diag/tnslsnr/dbsrv-1/listener/alert
$ ls -li
total 2028
5796100 -rw-r-----. 1 oracle oinstall 529985 Nov 17 10:34 log_1.log
6092293 -rw-r-----. 1 oracle oinstall 540743 Nov 17 10:38 log_2.log
6092294 -rw-r-----. 1 oracle oinstall 540155 Nov 17 10:41 log_3.log
6092295 -rw-r-----. 1 oracle oinstall 347884 Nov 17 10:43 log.xml
上限を探る
番号が大きくなった場合にどのような変化があるかを調査してみました。リスナーのパラメーターを以下のように設定します。
パラメーター | 設定値 | 説明 |
---|---|---|
LOG_FILE_NUM_listener | 1 | 番号付きのセグメント・ファイルが1個だけ保存される |
LOG_FILE_SIZE_listener | 1 | ログの最大値は1MB |
大量の接続リクエストを投入してローテーションを強制し、ファイル名の変化を確認しました。
16ビット
リスナーを停止し、ログファイル名を以下のように変更します。
$ cd $ORACLE_BASE/diag/tnslsnr/dbsrv-1/listener/alert
$ mv log_1.xml log_65534.xml
$ cd ../trace
$ mv listener_1.log listener_65534.log
$ lsnrctl start listener
ログの書き込みを続けると、あっさり16ビットの上限を超えました。
$ ll
total 1148
-rw-r----- 1 oracle oinstall 1048917 Nov 17 14:57 log_65537.xml
-rw-r----- 1 oracle oinstall 58895 Nov 17 14:57 log.xml
##32ビット
符号付き32ビットの上限である2,147,483,647に変更します。
$ cd $ORACLE_BASE/diag/tnslsnr/dbsrv-1/listener/alert
$ mv log_65537.xml log_2147483647.xml
$ cd ../trace
$ mv listener_65537.log listener_2147483647.log
$ lsnrctl start listener
ログの出力を継続すると、マイナスになりました。このことからセグメント・ファイルの上限は符号付き32ビットで保持していることがわかります。
$ ll
total 520
-rw-r----- 1 oracle oinstall 515830 Nov 17 15:02 listener_-2147483648.log
-rw-r----- 1 oracle oinstall 5430 Nov 17 15:02 listener.log
さらに負荷をかけていくと番号が大きくなっていきます。
$ ll
total 520
-rw-r----- 1 oracle oinstall 516499 Nov 17 15:04 listener_-2147483645.log
-rw-r----- 1 oracle oinstall 4465 Nov 17 15:04 listener.log
番号を-1に変更して再度テストを実施したところローテーションは行われなくなりました。
$ ll
total 2936
-rw-r----- 1 oracle oinstall 515920 Nov 17 15:06 listener_-1.log
-rw-r----- 1 oracle oinstall 2438590 Nov 17 15:10 listener.log
上記の結果からセグメント・ファイル番号の上限は 4 バイトの上限である 4,294,967,295 であるらしいことがわかりました。