Auswahl  

Frühjahrsputz in der Datenbank 

Oracle
DBA
RDBMS 11.2
29.06.18 (MP)
29.06.18 (MP)
DBA

Body

Wir beginnen mit unserem Frühjahrsputz dieses Mal sehr früh :-) und räumen die alten Trace-Dateien der Datenbank auf.
Die Oracle Version 11g stellt uns dafür ein eigenes Tool zur Verfügung: ADRCI
ADRCI steht hierbei für ADR Command Interpreter, wobei ADR ganz klassisch für Automatic Diagnostic Repository steht.

ADRCI wird auf der Kommandozeile gestartet (liegt im ORACLE_HOME/bin Pfad) mit dem sprechenden Namen adrci:

dos/unix> adrci

Da im diag-Ordner mehrere Tools ihre Dateien ablegen können, muss zuerst angegeben werden, welcher Bereich administriert werden soll. Dafür verwendet man den Befehl:

adrci> show homes
ADR Homes:
diag\clients\user_marco\host_1186817538_11
diag\clients\user_marco\host_1186817538_76
diag\clients\user_system\host_1186817538_11
diag\rdbms\o11g\o11g
diag\rdbms\o11g2\o11g2
diag\tnslsnr\myserver\listener
adrci> set home diag\rdbms\o11g2\o11g2

Zuständig für das Löschen von alten Trace-Dateien ist der MMON Prozess.
Zwei verschiedene Policies existieren als Voreinstellung:

SHORTP_POLICY = Wird verwendet für Trace-Dateien. Default-Einstellung 720 Stunden = 30 Tage. Geändert wird dieser Wert durch:

adcri> set control (SHORTP_POLICY = 3600)

LONGP_POLICY = Wird verwendet für Metadaten. Default 8760 Stunden = 1 Jahr.

adcri> set control (LONGP_POLICY = 8760)

MMON führt die Aktion dann innerhalb von 7 Tagen einmal aus.

Mit show control kann die Einstellung geprüft werden. Bevor Show control verwendet werden kann, muss zuerst ein Home gesetzt werden, sonst erhält man folgenden Fehler:

adrci> show control
DIA-48448: This command does not support multiple ADR homes

In Windows Vista, Windows 7 und Windows 2008 muss das Dos Fenster als Administrator geöffnet werden, sonst erscheint folgender Fehler:

adrci> show control
DIA-48251: Failed to open relation due to following error
DIA-48122: error with opening the ADR block file [d:\oracle\diag\rdbms\o112\o112\metadata\ADR_CONTROL.ams] [0]
DIA-27041: Message 27041 not found;  product=RDBMS; facility=DIA
OSD-04002: Datei kann nicht geöffnet werden
O/S-Error: (OS 5) Zugriff verweigert

Wenn die DB nicht permanent durchläuft, kann das Löschen auch über Monate ausfallen. Dann muss manuell gelöscht werden!

Folgendes Beispiel kann unter SQL*PLus und WINDOWS verwendet werden:

REM Lösche alle Trace-Datein älter als 2 Tage
DEFINE del_days=2
COL del_hours NEW_VALUE del_hours
SELECT &&del_days*24 as del_hours FROM dual;
REM Wie lautet der Name von Instanz und DB ?
COL db_name NEW_VALUE db_name
COL sid NEW_VALUE sid
SELECT lower(name) as db_name, lower(instance_name) as sid FROM v$instance,v$database;

Unter Windows mussten bei unseren Tests unter Win 7 64 Bit Doppelbackslashes verwendet werden!

host adrci exec="set homepath diag\\rdbms\\&&sid\\&&db_name;purge -age &&del_hours -type trace"
host adrci exec="set homepath diag\\rdbms\\&&sid\\&&db_name;purge -age &&del_hours -type incident"
host adrci exec="set homepath diag\\rdbms\\&&sid\\&&db_name;purge -age &&del_hours -type utscdmp"

Die Dokumentation drückt sich etwas schwammig aus, was mit der Alert-Datei passieren soll.

Fakt zum Zeitpunkt Januar 2011 ist:

  • Es gibt zwei Alert-Dateien ab 11g (XML Variante unter ORACLE_BASE/diag/rdbms/<sid>/<db_name>/alert und Trace Datei mit Namen alert<sid>.log im ORACLE_BASE/diag/rdbms/<sid>/<db_name>/trace Ordner)

 

  • Nur die XML Datei wird bereinigt, die Trace-Datei nicht (My Oracle Support Note: Doc ID 751082.1 Bug 6800147, der aber wohl nicht gefixt wird)

 

  • Sie müssen/können die Alert.log Trace-Datei manuell ohne ADRCI verschieben/archivieren/löschen.
host adrci exec="set homepath diag\\rdbms\\&&sid\\&&db_name;purge -age &&del_hours -type alert"

 Für UNIX verwenden Sie bitte folgendes Skript:

REM Lösche alle Trace-Datein älter als 2 Tage
DEFINE del_days=2
COL del_hours NEW_VALUE del_hours
SELECT &&del_days*24*60 as del_hours FROM dual;
REM Wie heisst Instanz und DB ?
COL db_name NEW_VALUE db_name
COL sid NEW_VALUE sid
SELECT name as db_name, lower(instance_name) as sid FROM v$instance,v$database;
host adrci exec="set homepath diag/rdbms/&&sid/&&db_name;purge -age &&del_hours -type trace"
host adrci exec="set homepath diag/rdbms/&&sid/&&db_name;purge -age &&del_hours -type incident"
host adrci exec="set homepath diag/rdbms/&&sid/&&db_name;purge -age &&del_hours -type utscdmp"
host adrci exec="set homepath diag/rdbms/&&sid/&&db_name;purge -age &&del_hours -type alert"

Oder wenn Sie bereits im ADRCI angemeldet sind und die Schritte manuell durchführen möchten (Trace-Dateien älter 10 Tage löschen):

adrci>set homepath diag\rdbms\o11g2\o11g2
adrci>purge -age 240 -type trace

Ach ja, es soll ja noch Oracle Kunden geben, die keine Oracle Version 11 einsetzen (habe ich gehört :-))
Für die ein paar Code Schnipsel:

UNIX:

Löschen aller Trace-Dateien (im aktuellen Ordner), die älter als 7 Tage sind:

find ./ -ctime +7 -name "*.trc" -exec rm -f {} \; -ls

Das gleiche für Logs:

find ./ -ctime +7 -name "*.log" -exec rm -f {} \; -ls

Windows:

Leider kann mit dem del Kommando nicht angegeben werden, aus welchem Zeitraum Dateien gelöscht werden sollen.
Verwenden Sie deshalb entweder vba/wsh oder die Power-Shell.
Alternativer Workaround:
Mit XCOPY neuere Dateien in Hilfsordner kopieren, dann Ordner löschen und Hilfsdateien zurückkopieren

Für die ganz Mutigen:
Ordnerinhalt immer komplett löschen. Dann kann natürlich auch kein älterer Fehler nachvollzogen werden, deswegen wird diese Vorgehensweise nur für unwichtige Test-Datenbanken empfohlen.

Weitere schöne Beispiele zum Aufräumen in der Datenbank erhalten Sie in unserem Reorg & Wartung Kurs.

Besuchen Sie uns doch bei einer unsere über 40 Oracle Schulungen in München - Unterhaching.