リスナーログのローテーション設定方法|サイズと世代数を制御してディスク肥大化を防ぐ

  • URLをコピーしました!
Oracle AI Database

Oracleデータベースを長期運用していると、リスナーログ(log.xml / listener.log)が際限なく増加し続け、気づいたらディスクを数十GB単位で圧迫していた…というトラブルは少なくありません。

本記事では、「リスナーログの増加で、OSのディスク容量を消費してしまう」問題の解決方法を検証コマンド付き・実機ログ付きで詳しく解説します。

この記事でわかること
  • リスナーログのデフォルトローテーション動作
  • ディスクサイズを圧迫するリスナーログの解消方法
  • LOG_FILE_NUM_<listener>パラメータによる世代数の制御方法
  • LOG_FILE_SIZE_<listener>パラメータによるサイズ上限の制御方法
目次

リスナーログのデフォルト動作と問題点

Oracleのリスナーログは、デフォルトで1ファイルあたり300MB単位でログローテーションが行われます。

また、リスナーログの保存世代数(保存ファイル数)はデフォルトで上限がないため、長年運用し続けるとログが際限なく増え続け、数十GB規模に達することもあります。

検証環境ではalertディレクトリだけで 21.2GB にまで肥大化しました。

[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

ここで注意したいのが、リスナーログのローテーションはalertフォルダのlog.xmlが300MBに達したタイミングで行われます。traceフォルダの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>:保持する世代数(現行ファイルを除く)

<listener> は実際のリスナー名に置き換えます。

手順1:LOG_FILE_SIZE_listenerでサイズを制御する

まずは、1ファイルあたりのサイズ上限を設定します。

本記事では動作確認をしやすくするため、検証用に1MBという小さな値を指定します。

[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の設定は、リスナーを再起動することで反映されます。

lsnrctl reloadでは反映されないので、lsnrctl stop / lsnrctl startのリスナー再起動で設定を反映させます。

[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で世代数を制御する

次に、リスナーログの世代数(保存ファイル数)を制御します。

本記事では動作確認をしやすくするため、検証用に3世代という小さな値を指定します。

[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で世代数を制御する

デフォルト設定のまま運用するとディスクを圧迫する原因になるため、新規構築時の標準設定として組み込んでおくことをおすすめします。

最後までご愛読ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Fラン卒・未経験からデータベースエンジニアに転身。
使用技術:Oracle製品
資格取得:情報処理安全確保支援士試験|応用情報技術者試験|OracleMaster Gold DBA|OCI Architect Associate

目次