Mit der 11g Veröffentlichung hat Oracle das Prinzip der automatischen Diagnose-Ablage (Automatic Diagnostic Repository, ADR) eingeführt, die eine unabhängige Verzeichnisstruktur für alle Arten von Logs und Spuren ist für die Datenbank, Listener und andere Oracle Produkte. Das Verzeichnis „diag befindet sich in $ORACLE_BASE, also sollten Sie sicherstellen, dass diese Variable auf das richtige Verzeichnis eingestellt ist. Wenn sie nicht gesetzt ist, werden die Dateien in $ORACLE_HOME/diag gespeichert.
Mit Oracle 11g war es ein Startpunkt und mehrere Teile der Oracle Datenbank, wie die Grid Infrastuktur, waren nicht in die neue Struktur eingeweiht. Mit Oracle 12c sind jetzt die meisten Logs, Spuren und Kerne in verschiedenen Verzeichnissen unter $ORACLE_BASE/diag (außer asmcmd, welches $ORACLE_BASE/log/diag nutzt!).
Logs und Spuren werden häufig zweifach in dieser Struktur gespeichert: die gute, alte Alarm-Datei wird als xml-Datei in $ORACLE_BASE/diag/rdbms/<DB__NAME>/<ORACLE_SID>/alert gespeichert und im zugehörigen Spurenverzeichnis im alten ascii-Layout.
Wie viele von Ihnen schon bemerkt haben, kann die ADR mit der Zeit ziemlich groß werden. Ich habe alert.log und listener.log mit einer Größe von mehreren GByte gesehen, die die gesamte Orale Datenbank Umgebung anhalten können, weil das Filesystem voll wird.
ADRCI
Aber einer der Vorrteile der ADR ist, dass es die Dateien ohne menschliches Eingreifen verwalten kann. Es gibt eine zugehörige Purge-Funktion, sodass alte Logs und Spuren automatische gelöscht werden. Leider liegt die Standard-Aufbewahrungsdauer für diese Logs bei einem Jahr! Es gibt zwei Parameter: SHORTP_POLICY (Standard 720 Stunden = 30 Tage) und LONGP_POLICY (Standard 8720 Stunden = 365 Tage).
Ich denke, normalerweise ist es nicht nötig ein Jahre alte Log Datein online zu lassen, es könnte also ratsam sein, den Parameter mit dem ADR Befehlszeilen-Interface zu ändern:
% adrci
Wenn Sie nur eine Datenbank haben und keine speziellen Einstellungen, sollte es nur eine ADR-Home geben und Sie können sofort weitermachen und die Werte ändern. Wenn Sie, wie in meiner Umgebung, mehrere Datenbanken haben, müssen Sie die Umgebung zu erst auswählen:
adrci> show homes diag/rdbms/rac112/RAC1122 diag/rdbms/rac112/TEST diag/rdbms/rac112/RAC1121 diag/rdbms/ron112/RON112_2 diag/rdbms/ron112/RON1121 diag/rdbms/ron112/RON112_1 adrci> set home diag/rdbms/rac112/RAC1122
Jetzt können Sie die Parameter für die spezifische Umgebung ändern:
adrci> show control ADR Home = /u01/app/oracle/diag/rdbms/rac112/RAC1122: ************************************************************************* ADRID SHORTP_POLICY LONGP_POLICY LAST_MOD_TIME ... ---------- ------------- ------------ --------------------------------- 1122254562 720 8760 2011-01-11 13:08:51.956565 +01:00 1 rows fetched adrci> set control (SHORTP_POLICY = 168) adrci> set control (LONGP_POLICY = 720) adrci> exit
Dies wird automatische alte Log-Dateien, Spuren, etc. löschen und den Platz wieder frei machen. Wenn Sie es eilig haben, können Sie die Dateien mit adrci auch manuell löschen:
adrci> set home diag/rdbms/rac112/RAC1122 adrci> purge
Listener.log
Ein Tipp noch zum listener.log: Wenn Sie ein Web-Interface haben, begegnet Ihnen vielleicht ein recht großer listener.log, weil jeder Connect/Disconnect aufgezeichnet wird. Gerade erst hatte einer meiner Kunden einen 10 GB listener.log und er füllte sich innerhalb von Minuten.
In diesem Fall sollten Sie die Aufzeichnung für den Listener besser komplett ausschalten:
% lsnrctl LSNRCTL> show log_status Connecting to (DESCRIPTION= (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) LISTENER parameter “log_status” set to ON The command completed successfully LSNRCTL> set log_status off
Das wird Ihnen helfen Ihren diag Zielort frei zu machen.
Wenn Sie Kommentare oder Anmerkungen haben, können Sie sich gern mit mir in Verbindung setzen.