
Oracleデータベースを長期運用していると、リスナーログ(log.xml / listener.log)が際限なく増加し続け、気づいたらディスクを数十GB単位で圧迫していた…というトラブルは少なくありません。
本記事では、「リスナーログの増加で、OSのディスク容量を消費してしまう」問題の解決方法を検証コマンド付き・実機ログ付きで詳しく解説します。
- リスナーログのデフォルトローテーション動作
- ディスクサイズを圧迫するリスナーログの解消方法
- LOG_FILE_NUM_<listener>パラメータによる世代数の制御方法
- LOG_FILE_SIZE_<listener>パラメータによるサイズ上限の制御方法
リスナーログのデフォルト動作と問題点
Oracleのリスナーログは、デフォルトで1ファイルあたり300MB単位でログローテーションが行われます。
また、リスナーログの保存世代数(保存ファイル数)はデフォルトで上限がないため、長年運用し続けるとログが際限なく増え続け、数十GB規模に達することもあります。
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/alert/
total 21.2G
drwxr-x---. 2 grid oinstall 140 Apr 30 08:49 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:48 log_1.xml
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:48 log_2.xml
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:49 log_3.xml
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:49 log_4.xml
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:49 log_5.xml
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:49 log_6.xml
-rw-r-----. 1 grid oinstall 300.1M Apr 30 08:49 log_7.xml
-rw-r-----. 1 grid oinstall 139K Apr 30 08:53 log.xml
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/trace
total 596.8M
drwxr-x---. 2 grid oinstall 180 Apr 30 08:49 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:48 listener_1.log
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:48 listener_2.log
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:49 listener_3.log
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:49 listener_4.log
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:49 listener_5.log
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:49 listener_6.log
-rw-r-----. 1 grid oinstall 85.2M Apr 30 08:49 listener_7.log
-rw-r-----. 1 grid oinstall 40K Apr 30 08:53 listener.log実際、上記の検証環境のログを見ても、log.xmlは約300MBでローテーションされているのに対し、listener.logは約85MBという中途半端なサイズで切り替わっていることがわかります。
これはlistener.log自体がローテーションのトリガーではなく、log.xmlがしきい値に達したときにlistener.logも連動してローテーションされる仕様になっています。。
検証コマンドの解説
今回のリスナーログのローテーション動作を確認するには、ログを意図的に増加させる必要があります。
本記事では、以下のコマンドを使用してリスナーログを肥大化させていきます。
for i in $(seq 1 100); do lsnrctl reload > /dev/null 2>&1; echo "$i 回目完了"; doneなお、ループ回数($(seq 1 100)の部分)は検証時の状況に応じて調整してください。本記事ではローテーションの挙動を確認するために、必要に応じて300回や600回など変更して実行しています。
解決方法:listener.oraに2つのパラメータを追加する
リスナーログのローテーションは、listener.oraに次の2つのパラメータを追記することで制御できます。
- LOG_FILE_SIZE_<listener> :1ファイルあたりの最大メガバイト(MB)
- LOG_FILE_NUM_<listener>:保持する世代数(現行ファイルを除く)
手順1:LOG_FILE_SIZE_listenerでサイズを制御する
まずは、1ファイルあたりのサイズ上限を設定します。
[grid@OracleRestart26ai ~]$ vi /u01/app/grid/product/26.0.0/grid/network/admin/listener.ora
[grid@OracleRestart26ai ~]$ tail -n 2 /u01/app/grid/product/26.0.0/grid/network/admin/listener.ora
LOG_FILE_SIZE_listener=1M
[grid@OracleRestart26ai ~]$ listener.oraの設定は、リスナーを再起動することで反映されます。
[grid@OracleRestart26ai ~]$ lsnrctl stop
LSNRCTL for Linux: Version 23.26.1.0.0 - Production on 30-APR-2026 09:16:47
Copyright (c) 1991, 2026, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)))
The command completed successfully
[grid@OracleRestart26ai ~]$ lsnrctl start
LSNRCTL for Linux: Version 23.26.1.0.0 - Production on 30-APR-2026 09:16:51
Copyright (c) 1991, 2026, Oracle. All rights reserved.
Starting /u01/app/grid/product/26.0.0/grid/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 23.26.1.0.0 - Production
・・・
The listener supports no services
The command completed successfully検証をクリーンな状態で行うため、過去のリスナーログ(log_*.xml、listener_*.log)をいったん削除しておきます。
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/alert/
total 384K
drwxr-x---. 2 grid oinstall 21 Apr 30 09:05 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 145K Apr 30 09:07 log.xml
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/trace
total 44K
drwxr-x---. 2 grid oinstall 26 Apr 30 09:05 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 44K Apr 30 09:07 listener.logローテーション動作を確認するため、先ほど紹介した検証コマンドでログを意図的に増加させます。
[grid@OracleRestart26ai ~]$ for i in $(seq 1 300); do lsnrctl reload > /dev/null 2>&1; echo "$i 回目完了"; done
1 回目完了
2 回目完了
・・・
299 回目完了
300 回目完了実行後にディレクトリを確認すると、設定どおり約1MBごとにローテーションされていることがわかります。
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/alert/
total 3.3M
drwxr-x---. 2 grid oinstall 55 Apr 30 09:10 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 1.1M Apr 30 09:09 log_1.xml
-rw-r-----. 1 grid oinstall 1.1M Apr 30 09:10 log_2.xml
-rw-r-----. 1 grid oinstall 191K Apr 30 09:10 log.xml
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/trace/
total 1.1M
drwxr-x---. 2 grid oinstall 70 Apr 30 09:10 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 294K Apr 30 09:09 listener_1.log
-rw-r-----. 1 grid oinstall 292K Apr 30 09:10 listener_2.log
-rw-r-----. 1 grid oinstall 55K Apr 30 09:10 listener.logただしこの状態では、サイズは小さくなったものの世代数の上限がないため、稼働を続ける限りファイルは増え続けてしまいます。次のステップで世代数も合わせて制御します。
手順2:LOG_FILE_NUM_listenerで世代数を制御する
次に、リスナーログの世代数(保存ファイル数)を制御します。
[grid@OracleRestart26ai ~]$ vi /u01/app/grid/product/26.0.0/grid/network/admin/listener.ora
[grid@OracleRestart26ai ~]$ tail -n 2 /u01/app/grid/product/26.0.0/grid/network/admin/listener.ora
LOG_FILE_SIZE_listener=1M
LOG_FILE_NUM_listener=3本設定値も同様にlsnrctl reloadでは反映されないので、lsnrctl stop / lsnrctl startのリスナーを再起動で設定を反映させます。
[grid@OracleRestart26ai ~]$ lsnrctl stop
・・・
The command completed successfully
[grid@OracleRestart26ai ~]$ lsnrctl start
・・・
The listener supports no services
The command completed successfully引き続き、検証コマンドでログをさらに増やしていき、ログファイルが順次増えていきます。
[grid@OracleRestart26ai ~]$ for i in $(seq 1 600); do lsnrctl reload > /dev/null 2>&1; echo "$i 回目完了"; done
1 回目完了
2 回目完了
・・・
599 回目完了
600 回目完了実行後にディレクトリを確認すると、保持される世代数が 3つ + 現行ファイル(log.xml / listener.log) に保たれ、上限を超えた古いファイル(log_1.xml、log_2.xml)は自動的に削除されていることがわかります。
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/alert/
total 5.0M
drwxr-x---. 2 grid oinstall 72 Apr 30 09:17 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 1.1M Apr 30 09:13 log_3.xml
-rw-r-----. 1 grid oinstall 1.1M Apr 30 09:14 log_4.xml
-rw-r-----. 1 grid oinstall 1.1M Apr 30 09:17 log_5.xml
-rw-r-----. 1 grid oinstall 51K Apr 30 09:17 log.xml
[grid@OracleRestart26ai ~]$ ls -lah /u01/app/grid/diag/tnslsnr/OracleRestart26ai/listener/trace/
total 1.3M
drwxr-x---. 2 grid oinstall 92 Apr 30 09:17 .
drwxr-x---. 14 grid oinstall 179 Mar 21 11:54 ..
-rw-r-----. 1 grid oinstall 292K Apr 30 09:13 listener_3.log
-rw-r-----. 1 grid oinstall 292K Apr 30 09:14 listener_4.log
-rw-r-----. 1 grid oinstall 292K Apr 30 09:17 listener_5.log
-rw-r-----. 1 grid oinstall 16K Apr 30 09:18 listener.log
[grid@OracleRestart26ai ~]$
これでサイズと世代数の両方が制御され、リスナーログのディスク使用量を一定範囲内にコントロールできるようになりました。
まとめ
「リスナーログの増加でOSのディスク容量を消費してしまう」問題は、listener.oraに2つのパラメータを追加するだけで解決できます。
- 手順1:LOG_FILE_SIZE_listenerでサイズを制御する
- 手順2:LOG_FILE_NUM_listenerで世代数を制御する
デフォルト設定のまま運用するとディスクを圧迫する原因になるため、新規構築時の標準設定として組み込んでおくことをおすすめします。
最後までご愛読ありがとうございました。
