Commit f1fd5a

2026-01-05 08:56:54 feagor: -/-
/dev/null .. oracle/admin/Listener_Rotation.md
@@ 0,0 1,74 @@
+ I started off the new year by reading the Oracle Database 19c New Features Guide and I came across a very nice new feature : Oracle Network Log File Segmentation. It is now possible to specify a maximum file size for listener logs and a maximum number of files to keep. In previous versions, only log.xml was segmented in chunks of 10Mb, but not the plain text listener.log.
+
+ The Net Services Administrator’s Guide briefly describes this feature and the Database Net Services Reference gives a definition of 2 new parameters in listener.ora :
+
+ LOG_FILE_NUM_listener_name : To specify the number of log file segments. At any point of time there can be only n log file segments where n is LOG_FILE_NUM_listener_name. If the log grows beyond this number, then the older segments are deleted.
+ LOG_FILE_SIZE_listener_name : To specify the size of each log file segment. The size is in MB.
+
+ Let’s run a quick test with a listener in version 19.4 :
+
+ # lsnrctl status listener
+
+ LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 03-JAN-2020 21:55:44
+
+ Copyright (c) 1991, 2019, Oracle. All rights reserved.
+
+ Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
+ STATUS of the LISTENER
+ ------------------------
+ Alias LISTENER
+ Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
+ Start Date 02-JAN-2020 22:24:32
+ Uptime 0 days 23 hr. 31 min. 11 sec
+ Trace Level support
+ Security ON: Local OS Authentication
+ SNMP OFF
+ Listener Parameter File /u01/app/19_4_0_0/grid/network/admin/listener.ora
+ Listener Log File /u01/app/oracle/diag/tnslsnr/collabn2/listener/alert/log.xml
+ [...]
+
+ Set those 2 parameters with arbitrary values :
+
+ LOG_FILE_NUM_LISTENER=8
+ LOG_FILE_SIZE_LISTENER=1
+
+ Then restart the listener because a simple reload will not take these modifications into account :
+
+ # lsnrctl stop listener
+ # lsnrctl start listener
+
+ After running some load against the listener, check the state of the plain text log files :
+
+ # [ oracle@collabn2:/u01/app/oracle/diag/tnslsnr/collabn2/listener/trace [21:42:04] [19.4.0.0.0 [GRID] SID=GRID] 0 ] #
+ # ls -lh
+ total 1.2G
+ -rw-r-----. 1 oracle oinstall 576K Jan 2 20:51 listener_1.log
+ -rw-r-----. 1 oracle oinstall 556K Jan 2 21:09 listener_2.log
+ -rw-r-----. 1 oracle oinstall 537K Jan 2 21:16 listener_3.log
+ -rw-r-----. 1 oracle oinstall 594K Jan 2 21:21 listener_4.log
+ -rw-r-----. 1 oracle oinstall 594K Jan 2 21:25 listener_5.log
+ -rw-r-----. 1 oracle oinstall 595K Jan 2 21:28 listener_6.log
+ -rw-r-----. 1 oracle oinstall 595K Jan 2 21:32 listener_7.log
+ -rw-r-----. 1 oracle oinstall 595K Jan 2 21:35 listener_8.log
+ -rw-r-----. 1 oracle oinstall 209K Jan 2 21:42 listener.log
+
+ I do have a number of files as expected, but they are approximately half the size I imagined. I had no idea that actually, the parameter LOG_FILE_SIZE_listener_name rather defines the size of log_*.xml files :
+
+ # [ oracle@collabn2:/u01/app/oracle/diag/tnslsnr/collabn2/listener/trace [21:45:05] [19.4.0.0.0 [GRID] SID=GRID] 0 ] #
+ # ls -lh ../alert/
+ total 10M
+ drwxr-xr-x. 14 oracle oinstall 4.0K Aug 13 16:20 ..
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 20:51 log_1.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:09 log_2.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:16 log_3.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:21 log_4.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:25 log_5.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:28 log_6.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:32 log_7.xml
+ -rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:35 log_8.xml
+ drwxr-xr-x. 2 oracle oinstall 4.0K Jan 2 21:35 .
+ -rw-r-----. 1 oracle oinstall 363K Jan 2 21:44 log.xml
+
+ And plain text listener_*.log files are then rotated accordingly.
+
+ I will keep this detail in mind when implementing this useful new feature.
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9