oracle
oracle19c

ログファイルの最大値指定機能を試す(Oracle Database 19c)


テキスト形式のログ

Oracle Database 11g以降、ログ出力先はADR (Automatic Diagnostic Repository) に統合されました。出力フォーマットは新しいXML形式と、従来のテキスト形式が両方出力されていました。テキスト形式のログファイルのうち、特にlistener.oraファイルはサイズが大きくなるにもかかわらず、自動ローテーションされないため管理が面倒なファイルでした。


Oracle Database 19cの新機能

Oracle Database 19cでは、ネットワーク系のテキスト形式ログファイルに自動ローテーション機能が加わりました。リスナー、CMAN、GSMなどが対象になります。Oracle Database 19c New Features Guide に簡単な説明が記載されています。

なぜか、Database Net Services Reference マニュアルの Changes in This Release for Oracle Database Net Services Reference 項目には新機能の説明がありません。


リスナー・ログの最大値

リスナー・ログ(listener.log)ファイルの最大値を決めるパラメーターは以下の二つです。


  • LOG_FILE_NUM_{listener}

    ログファイルの最大個数を決定します。デフォルト値は設定されておらず、個数制限はありません。


  • LOG_FILE_SIZE_{listener}

    単一のログファイルの最大サイズをメガバイト単位で指定します。デフォルト値は300MBです。


下記の設定例では、ファイルの個数を3個、最大サイズを1MBにしています。

LISTENER =

(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbsrv-1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

LOG_FILE_NUM_LISTENER = 3
LOG_FILE_SIZE_LISTENER = 1


実験

実際にどのように動作するのか試してみました。ある程度負荷をかけてログファイルの様子を見てみます。ログファイル名として、listener_{n}.log ファイルが作成されています。古いファイルには数字を付けて別ファイルとして管理するようです。

最大サイズを1MBと設定しているにも関わらず、半分のサイズでローテーションされる理由はわかりません。

$ cd $ORACLE_BASE/diag/tnslsnr/dbsrv-1/listener/trace

$ ls -li
total 2028
5796100 -rw-r-----. 1 oracle oinstall 529985 May 1 10:34 listener_1.log
6092293 -rw-r-----. 1 oracle oinstall 540743 May 1 10:38 listener_2.log
6092294 -rw-r-----. 1 oracle oinstall 540155 May 1 10:41 listener_3.log
6092295 -rw-r-----. 1 oracle oinstall 347884 May 1 10:43 listener.log

さらに負荷をかけると、数字付きのログファイル個数が最大値(LOG_FILE_NUM_listener)を越え、古いファイルが自動的に削除されていることがわかります。もっとも古いファイルが無くなっていますが、消えたもっとも古いファイルと書き込み中の最新ファイルはiノード番号が同じ(5796100)です。ローテーションを行う際はもっとも古いファイルを切り詰めてファイル名を変更することでローテーションしていることが予想されます。

$ ls -li

total 2468
6092293 -rw-r-----. 1 oracle oinstall 540743 May 1 10:38 listener_2.log
6092294 -rw-r-----. 1 oracle oinstall 540155 May 1 10:41 listener_3.log
6092295 -rw-r-----. 1 oracle oinstall 539689 May 1 10:45 listener_4.log
5796100 -rw-r-----. 1 oracle oinstall 240644 May 1 10:46 listener.log

ログファイルの数字が9を越えると単純に10が作られます。

$ ls -li

total 2468
6092293 -rw-r-----. 1 oracle oinstall 540297 May 1 11:13 listener_10.log
6092295 -rw-r-----. 1 oracle oinstall 540796 May 1 11:06 listener_8.log
5796100 -rw-r-----. 1 oracle oinstall 540291 May 1 11:09 listener_9.log
6092294 -rw-r-----. 1 oracle oinstall 283151 May 1 11:14 listener.log