DOAG Datenbank Kolumne: Listener Logfile Housekeeping

  • Erstellt von Matthias Mann
  • Oracle, Datenbank Kolumne, Oracle, Datenbank

Matthias Mann erläutert, wie sich Oracles Logfile Segmentation zum Housekeeping eines Logfilesystems nutzen lässt.

Das Problem

In großen Datenbankserverinstallationen mit Grid-Infrastruktur werden die Verbindungsaufbauversuche aller Datenbank-Clients von der Listener-Infrastruktur zentral entgegengenommen und verarbeitet.
Diese besteht im allgemeinen aus einem VIP-Listener und SCAN-Listenern. Hinzu kommen eventuell noch andere Listener
mit Spezialaufgaben. Jeder Listener produziert zwei Logdateien, eine in XML-Format im Unterverzeichnis "alert" der Diagnostic Destination
und eine zeilenbasierte Version im Unterverzeichnis "trace" der Diagnostic Destination.
Auf einem Datenbank-Cluster mit Dutzenden oder Hunderten Datenbank-Services und entsprechend vielen Clients kommen in sehr kurzer
Zeit erhebliche Mengen an Listener-Logeinträgen zusammen.  
Wenn der Cluster-Administrator kein Housekeeping konfiguriert, führt das unweigerlich sehr schnell zu einem vollen Logfilesystem.
 

Die Lösung

Oracle bietet eine sehr einfache Lösungsmöglichkeit dafür an, die sich Logfile Segmentation nennt.

Folgende Parameter können in der listener.ora konfiguriert werden:

DIAG_ADR_ENABLED_<LISTENER_NAME>=ON   # Default
LOG_FILE_NUM_<LISTENER_NAME>=...      # Anzahl der Listener Log Segmente, es existiert kein Default
LOG_FILE_SIZE_<LISTENER_NAME>=...     # Log-Segment Größe in MB (Default: 300 MB)
LOGGING_<LISTENER_NAME>=ON            # Default          
 

Wie funktionert es?

Setzen wir als Beispiel:

LOG_FILE_NUM_LISTENER=2               
LOG_FILE_SIZE_LISTENER=10    

Sobald die Datei log.xml im alert-Folder 10 MB an Größe erreicht, wird sie segmentiert. Sie wird in log_1.xml umbenannt und neue Einträge
werden in log.xml geschrieben. Sobald log.xml wieder 10 MB Größe erreicht, wird sie in log_2.xml umbenannt, neue Einträge wandern wieder in log.xml.
Zu diesem Zeitpunkt haben wir im Verzeichnis "alert":

log_1.xml # 10 MB
log_2.xml # 10 MB
log.xml   # aktuelles Segment

Wenn nun log.xml wieder 10 MB Größe erreicht, wird das älteste Segment log_1.xml gelöscht, log.xml in log_3.xml umbenannt und neue Einträge wandern, wie gehabt, in ein neues log.xml.

Wir haben nun

log_2.xml # 10 MB
log_3.xml # 10 MB
log.xml   # aktuelles Segment

usw.
Zu jedem Zeitpunkt haben wir also in diesem Beispiel höchstens 3 Segmente mit der spezifizierten maximalen Größe von 10 MB im “alert”-Ordner vorliegen.
 

Bemerkungen

Die zeilenbasierte Version des Listener Logs listener.log wird jeweils zur gleichen Zeit wie das xml-formatierte Segment segmentiert und
ältere Segmente werden auch hier in analoger Weise gelöscht.

Wird der Parameter LOG_FILE_NUM_<LISTENER_NAME> nicht gesetzt, werden ältere Segmente nicht gelöscht.

Man kann auch den Parameter LOGGING_<LISTENER_NAME>=OFF setzen, um das Listener Logging komplett zu deaktivieren, wenn es nicht gewünscht oder benötigt wird.
 

Resümee

Im eingeschwungenen Systemzustand, kenne ich die ungefähre Anzahl von Verbindungsversuchen pro Zeiteinheit und kann, abhängig von der Dauer, in der ich die Listener Logs auf Platte halten muss (bis zum Beispiel eine Sicherung erfolgt ist), die Größe des Filesystems abschätzen, welches in der Lage ist, alle anfallenden Log-Dateien zu puffern, ohne dass es überläuft.
 

Referenz

https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/oracle-net-listener-parameters-in-listener-ora.html 


Matthias Mann
Co-Themenverantwortlicher Datenbankadministration

 

© Steve Buissinne