
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 wheren
isLOG_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.