Skip to Main Content

 

Auswahl  

Komplett Übersicht aller Oracle Tipps

Frühjahrsputz in der Datenbank 

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

Passende Schulungen zum Thema

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.

Weitere Interessante Kurs-Tipps zum Thema

Besuchen Sie uns doch bei einer unsere über 50 Oracle Schulungen in München - Unterhaching, oder verfolgen Sie die Training per Videostreaming bequem vom Home Office oder Büro aus.