Listener Logfiles verwalten in 19c
Im heutigen Blog-Eintrag stellen wir Ihnen ein weiteres neues Feature der Oracle 19c Datenbank vor, das im täglichen Betrieb sehr nützlich werden kann. Es geht um den Listener und um dessen Logdateien. Der Listener schreibt seit jeher ein Logfile in Textform namens listener.log. Seit es das Automatic Diagnostic Repository (ADR) gibt, werden zusätzlich auch XML-Dateien mit praktisch identischen Informationen geschrieben. Der Unterschied ist, dass das Text-Log immer weiter fortgeschrieben wird, während vom XML-Log jeden Tag ein neue Datei entsteht. Dadurch können die XML-Logs mit "adrci purge" bereinigt werden, denn diese Dateien altern. Um die Bereinigung des Text-Logs muss man sich selber kümmern.
Mit Oracle 19c ist das nun aber auch Geschichte, denn der New Features Guide verweist auf eine neue Funktion, die auf den Namen "Logfile Segmentation" hört. Diese Funktion bringt zwei neue Parameter für die Listener-Konfiguration mit, die wir im Folgenden gleich vorstellen und erklären werden.
Zuerst generieren wir aber etwas Aktivität in den Listener Logs. Dort werden bekanntlich alle Verbindungsversuche aufgezeichnet. Daher müssen wir also möglichst viele Verbindungsversuche erzeugen um das Verhalten zu prüfen. Dazu dient dieses Shell Skript:
while true; do
$ORACLE_HOME/bin/sqlplus -S -L system/****@vm123.support.robotron.de:1521/testdb << EOF
select * from dual;
exit;
EOF
done
Dieses Skript starten wir einfach ein paar mal im Hintergrund parallel um die Last noch etwas zu erhöhen.
[oracle@vm123 ~]$ ./connects.sh > /dev/null &
[oracle@vm123 ~]$ ./connects.sh > /dev/null &
[oracle@vm123 ~]$ ./connects.sh > /dev/null &
[oracle@vm123 ~]$ ./connects.sh > /dev/null &
[oracle@vm123 ~]$ ./connects.sh > /dev/null &
Bevor wir uns den neuen Parametern zuwenden, werfen wir einen Blick auf das standardmäßige Verhalten. Ohne unser Zutun entstehen folgende Log-Dateien:
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/alert/
insgesamt 77M
-rw-r----- 1 oracle oinstall 77M 23. Jun 08:58 log.xml
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/trace/
insgesamt 43M
-rw-r----- 1 oracle oinstall 43M 23. Jun 08:58 listener.log
Da wir es hier mit einer frischen Installation zu tun haben, sieht man lediglich ein einziges XML-Log. Das soll uns aber nicht stören. Wir bringen nun die beiden neuen Listener Parameter zu Einsatz.
- LOG_FILE_SIZE_<Listener Name> => Definiert die maximale Größe des XML Listener Logs
- LOG_FILE_NUM_<Listener Name> => Definiert die maximale Anzahl von aufzuhebenden Listener Logs
Beide Parameter werden in die listener.ora Datei eingetragen und der Listener im Anschluss neu gestartet, um die Parameter zu aktivieren.
[oracle@vm121 ~]$ tail -2 $ORACLE_HOME/network/admin/listener.ora
LOG_FILE_NUM_LISTENER=4
LOG_FILE_SIZE_LISTENER=2
[oracle@vm123 ~]$ srvctl stop listener; srvctl start listener
Wir sehen auch sofort die ersten Auswirkungen dieser Parameter, denn das aktuelle XML-Log war bereits größer als die 2MB, die der Parameter LOG_FILE_SIZE_LISTENER vorgibt und daher wurde ein neues XML-Log erstellt. Auch vom Text-Log wurde zeitgleich eine neue Version erstellt.
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/alert/
insgesamt 79M
-rw-r----- 1 oracle oinstall 79M 23. Jun 08:59 log_1.xml
-rw-r----- 1 oracle oinstall 200K 23. Jun 08:59 log.xml
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/trace
insgesamt 44M
-rw-r----- 1 oracle oinstall 44M 23. Jun 08:59 listener_1.log
-rw-r----- 1 oracle oinstall 167K 23. Jun 08:59 listener.log
Lassen wir unser Skript im Hintergrund weiterlaufen, so entstehen nach und nach neue Logs, wenn die maximale Größe überschritten wird. Das XML-Log ist dabei führend.
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/alert/
insgesamt 81M
-rw-r----- 1 oracle oinstall 79M 23. Jun 08:59 log_1.xml
-rw-r----- 1 oracle oinstall 2,1M 23. Jun 09:01 log_2.xml
-rw-r----- 1 oracle oinstall 93K 23. Jun 09:01 log.xml
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/trace
insgesamt 45M
-rw-r----- 1 oracle oinstall 44M 23. Jun 08:59 listener_1.log
-rw-r----- 1 oracle oinstall 1,2M 23. Jun 09:01 listener_2.log
-rw-r----- 1 oracle oinstall 139K 23. Jun 09:01 listener.log
Später sehen wir dann auch den Effekt des LOG_FILE_NUM_LISTENER Parameters, denn es bleiben immer nur exakt 4 Vorgängerversionen der Logs liegen, alle älteren Versionen werden automatisch gelöscht:
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/alert/
insgesamt 9,1M
-rw-r----- 1 oracle oinstall 2,1M 23. Jun 09:19 log_12.xml
-rw-r----- 1 oracle oinstall 2,1M 23. Jun 09:21 log_13.xml
-rw-r----- 1 oracle oinstall 2,1M 23. Jun 09:23 log_14.xml
-rw-r----- 1 oracle oinstall 2,1M 23. Jun 09:25 log_15.xml
-rw-r----- 1 oracle oinstall 1,1M 23. Jun 09:26 log.xml
[oracle@vm123 ~]$ ls -lh $ORACLE_BASE/diag/tnslsnr/vm123/listener/trace
insgesamt 5,1M
-rw-r----- 1 oracle oinstall 1,2M 23. Jun 09:19 listener_12.log
-rw-r----- 1 oracle oinstall 1,2M 23. Jun 09:21 listener_13.log
-rw-r----- 1 oracle oinstall 1,2M 23. Jun 09:23 listener_14.log
-rw-r----- 1 oracle oinstall 1,2M 23. Jun 09:25 listener_15.log
-rw-r----- 1 oracle oinstall 634K 23. Jun 09:26 listener.log
Alles in allem also finden wir eine praktikable Methode zur Verwaltung der Listener Logfiles mit Bordmitteln. Wir müssen weder das "adrci" bemühen um die veralteten XML-Logs loszuwerden noch andere Tools wie "logrotate" o.ä. um die Text-Logs in ihrem Wachstum zu begrenzen. Und obwohl Oracle das Feature als besonders geeignet für Cloud-Umgebungen hält, ist es doch am Ende für jegliche Art von Oracle Datenbanken gut geeignet.
Weitere Informationen zur Logfile Segmentation finden sich auch noch im Net Services Administrator's Guide.
Kommentare
Keine Kommentare