DBA Community - März 2011
|
ADRCI: Automatic Diagnostic Repository Command Interpreter
von Sebastian Solbach, ORACLE Deutschland B.V. & Co. KG
Mit der Oracle Datenbank 11g wurde das Logverhalten der Oracle Datenbank umgestellt und die Trace, Log und Alert Informationen im Automatic Diagnostic Repository abgespeichert.
Der primäre Grund, die Protokollierung der Datenbank von der alten Struktur unter $ORACLE_BASE/admin in die neue Struktur unter $ORACLE_BASE/diag/rdbms zu überführen, lag sicherlich
auch an der Formatänderung in das XML Format, welches die gespeicherten Daten nun maschinell einfacher lesbar macht. Wo befindet sich eigentlich das ADR?
Das Automatic Diagnostic Repository findet man im Normalfall unter dem ORACLE_BASE Verzeichnis. Allerdings kann man über die Konfigurationsfiles der Datenbank, des Listeners oder
der Datenbank selber steueren, wo die Daten des ADR gespeichert werden sollen.
Bei der Datenbank übernimmt dies der DIAGNOSTIC_DEST Parameter: SQL> show parameter DIAG NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ diagnostic_dest string /opt/oracleBeim Listener wird das ADR mit Hilfe des ADR_BASE_listener_name in der Datei listener.ora unter $ORACLE_HOME/network/admin angegeben. Die Einstellungen für den Client steuert ADR_BASE in der SQLNET.ORA, sofern DIAG_ADR_ENABLED nicht explizit auf OFF gesetzt wurde (denn sonst gelten die Einstellungen für das Client Logging und Tracing wie in 10g). Der Default ist hierbei allerdings nicht das ORACLE_BASE, wie beim Listener, sondern das Verzeichnis <lokales Verzeichnis>/<user>_diag. Eine wichtiger Umstand, da hier auch das Tracing für den Client geschrieben wird, wenn es enabled wird. Aufruf des Automatic Diagnostic Repository Command Interpreters
Das ADRCI befindet sich im 'bin' Verzeichnis der jeweiligen Oracle Installation und kann nach Setzen des ORACLE_HOMEs über $ORACLE_HOME/bin/adrci aufgerufen werden.
Danach versucht das ADRCI zu ermitteln, wo die Diagnose Information resp. das Base Verzeichnis 'diag' des Automatic Diagnostic Repository zu finden ist.
Hierzu wird erst im lokalen Verzeichnis bei Aufruf von ADRCI nachgeschaut und, ist dort kein diag Verzeichnis mit der entsprechenden Struktur vorhanden, das ORACLE_BASE Verzeichnis als Default
eingestellt. Ist auch dieses nicht angegeben, so meldet ADRCI, dass kein ADR home gesetzt ist.
$ $ORACLE_HOME/bin/adrci ADRCI: Release 11.2.0.2.0 - Production on Mon Mar 5 14:48:10 2012 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. No ADR base is setDas Base kann jederzeit über 'set base' verändert werden, genau wie die Navigation direkt in ein HOME über den Befehl 'set home' möglich ist. Die verfügbaren Homes innerhalb des ADRs lassen sich mit 'show homes' anzeigen. adrci> set base /opt/oracle adrci> show homes ADR Homes: diag/tnslsnr/bumucsvm1/listener diag/asm/+asm/+ASM1 diag/rdbms/buvmrac/buvmrac_1In die einzelnen Homes kann nun über 'set home' navigiert werden. Dabei ist es entweder möglich, den ganzen Pfad anzugeben oder einfach nur ein Verzeichnis (wie den Datenbank Namen): adrci> set home diag/rdbms/buvmrac/buvmrac_1 adrci> set home rdbms adrci> set home buvmrac adrci> set home buvmrac_1 adrci> show home ADR Homes: diag/rdbms/buvmrac/buvmrac_1Da es in meinem Falle nur ein Datenbank Home gibt, haben alle Befehle dieselbe Wirkung: Das aktive Home wird auf das RDBMS Home gesetzt. Die Navigation zwischen den Homes ist eine wichtige Funktion, da einige weiterführende Befehle nur innerhalb eines ADR Homes funktionieren. Andere dagegen, wie z.B. die Anzeige des Alert Logs, sind auch über mehrere Homes möglich, was gerade das Auffinden der Alert.logs in komplexen Umgebungen mit mehreren Datenbank Instanzen ungemein vereinfacht: adrci> show alert Choose the alert log from the following homes to view: 1: diag/tnslsnr/bumucsvm1/listener 2: diag/asm/+asm/+ASM1 3: diag/rdbms/buvmrac/buvmrac_1 Q: to quit Please select option: Hilfe beim ADRCI
Das ADRCI besitzt selber eine sehr gute Hilfe-Funktion, was einem häufig den Blick in die Dokumentation
erspart. Zu jedem Befehl bekommt man auch weiterführende Informationen mit 'help <befehl>':
adrci> help
HELP [topic]
Available Topics:
CREATE REPORT
ECHO
EXIT
HELP
HOST
IPS
PURGE
RUN
SET BASE
SET BROWSER
SET CONTROL
SET ECHO
SET EDITOR
SET HOMES | HOME | HOMEPATH
SET TERMOUT
SHOW ALERT
SHOW BASE
SHOW CONTROL
SHOW HM_RUN
SHOW HOMES | HOME | HOMEPATH
SHOW INCDIR
SHOW INCIDENT
SHOW PROBLEM
SHOW REPORT
SHOW TRACEFILE
SPOOL
There are other commands intended to be used directly by Oracle, type
"HELP EXTENDED" to see the list
adrci> help set control
Usage: SET CONTROL (
Automatisches Housekeeping der Logfiles
Eine Besonderheit im ADR ist, dass Logfiles, wie das Alert.log, automatisch rollierend angelegt werden. Das Alert.log der Datenbank wird dabei nicht größer als 10MB und danach in alert_<nummer>.xml
umbenannt. Dies gilt natürlich nicht für TRACE Dateien: Diese werden als eine vollständige Datei abgelegt.
Diese Form der Rollierung erlaubt es auch, dass Dateien, die älter als 365 Tage sind, automatisch gelöscht werden können. Hierzu kennt das ADR zwei Policies bzw. Zeiten: SHORTP_POLICY und LONGP_POLICY. Die SHORTP_POLICY umfasst dabei Trace Files, Core Dumps und Packaging Informationen und ist per Default auf 720 Stunden gesetzt - also 30 Tage. Die LONGP_POLICY steht auf 8760 Stunden (365 Tage) und besagt, wann die alten alert_<nummer>.xml Dateien gelöscht werden dürfen, bzw. ist das Zeitintervall für die Aufbewahrung von Incidents. Diese Einstellungen können über 'show control' angezeigt, bzw. über 'set control' im jeweiligen ADR Home festgelegt werden: adrci> set home diag/rdbms/buvmrac/buvmrac_1 adrci> show control ADR Home = /opt/oracle/diag/rdbms/buvmrac/buvmrac_1: ************************************************************ ADRID SHORTP_POLICY LONGP_POLICY LAST_MOD_TIME ----------- -------------- ------------- ------------------- 3744514972 720 8760 2012-02-16 18:33:43 1 rows fetched adrci> set control (SHORTP_POLICY = 696) adrci> show control ADR Home = /opt/oracle/diag/rdbms/buvmrac/buvmrac_1: ************************************************************ ADRID SHORTP_POLICY LONGP_POLICY LAST_MOD_TIME ----------- -------------- ------------- ------------------- 3744514972 696 8760 2012-03-05 16:17:38 1 rows fetchedBesonders interessant ist diese Policy bei rdbms und ASM ADR Homes, da hier das automatische Löschen von der Datenbank-, bzw. ASM-Instanz übernommen wird und so eine automatische Logfilepflege stattfindet. Leider werden die Auditierungsdaten nicht im ADR abgelegt. Bei den Logfiles des Listeners, Clients und anderer Homes fehlt allerdings ein aktiver Prozess, der das automatische Löschen in periodischen Abständen übernehmen könnte. Deswegen wird dies hier mit Hilfe des 'purge' Befehls manuell angestossen: adrci> set home diag/tnslsnr/bumucsvm1/listener adrci> purgeMit dem gleichen Befehl ist es möglich, auch nur Trace Dateien zu löschen oder die Policies manuell zu überschreiben. Man sollte aber darauf achten, dass die Einheit beim Purge Befehl MINUTEN sind und nicht Stunden, wie bei den Policies. Ohne Angabe des Types werden alle Logfiles bis zum betreffenden Zeitpunkt gelöscht. adrci> set home diag/tnslsnr/bumucsvm1/listener adrci> purge -age 1440 -type traceNicht von dieser Funktionalität betroffen ist das aus Kompatibilitätsgründen immer noch mitgeführte "alte" alert.log. Dieses befindet sich im trace Unterverzeichnis des ADR und das Größenwachstum dieser Datei muss noch selber kontrolliert werden. Von Problemen und Incidents
Eine weitere Besonderheit einer 11g Datenbank ist im Falle eines Fehlers (wie einem ORA-600) mehr Informationen in die Tracedateien zu schreiben. Ausserdem wird das Auftreten eines solchen Fehlers
(welcher auch im Alert.log der Datenbank zu finden ist) als sogenanntes "Problem" bzw. "Incident" im ADR gekennzeichnet. Tritt ein und dasselbe Problem mehrmals auf, so ist jeder aufgetretene
Fehler ein weiterer Incident, die aber vom ADR gemeinsam als ein einziges Problem gekennzeichnet werden.
Mit Hifle von SHOW PROBLEM bzw. SHOW INCIDENTS können die gesammelten Probleme aller Homes unterhalb des ADR Bases angezeigt werden. Dies schafft schnell einen guten Überblick auf den kompletten Datenbankserver (vorrausgesetzt alle Diagnose Informationen liegen in ein und demselben ADR Base/Oracle Base): adrci> show problem ADR Home = /opt/oracle/diag/tnslsnr/bumucsvm1/listener: ************************************************************************* 0 rows fetched ADR Home = /opt/oracle/diag/asm/+asm/+ASM1: ************************************************************************* 0 rows fetched ADR Home = /opt/oracle/diag/rdbms/buvmrac/buvmrac_1: ************************************************************************* PROBLEM_ID PROBLEM_KEY LAST_INCIDENT LASTINC_TIME ------------ ------------- -------------------- ------------------------- 1 ORA 4031 40389 2012-03-05 17:27:09 1 rows fetched adrci> set home rdbms adrci> show incident ADR Home = /opt/oracle/diag/rdbms/buvmrac/buvmrac_1: ************************************************************************* INCIDENT_ID PROBLEM_KEY CREATE_TIME -------------------- -------------------------- ------------------------- 40385 ORA 4031 2012-03-05 17:26:00.833000 +01:00 40386 ORA 4031 2012-03-05 17:26:18.662000 +01:00 ...Genauere Details lassen sich mit show incident oder show problem ebenfalls anzeigen: adrci> show incident -mode detail -p "incident_id=40389" ADR Home = /opt/oracle/diag/rdbms/buvmrac/buvmrac_1: ************************************************************************* ********************************************************** INCIDENT INFO RECORD 1 ********************************************************** INCIDENT_ID 40389 STATUS ready CREATE_TIME 2012-03-05 17:27:09.607000 +01:00 PROBLEM_ID 1 CLOSE_TIMEDies kann nun verwendet werden, um ein sog. Incident- bzw. Problem-Paket zu erzeugen, welches an Oracle Support hochgeladen werden kann. adrci> set home rdbms adrci> ips pack problem 1 in /tmp Generated package 1 in file /tmp/ORA4031_20120305174817_COM_1.zip, mode complete adrci> ips pack incident 40385 in /tmp Generated package 2 in file /tmp/ORA4031_20120305174817_COM_1.zip, mode completeJe nach angefallenen Logs, kann das Packen einige Zeit dauern. Die Support Workbench vom Enterprise Manager greift auf dieselben Informationen und Befehle zurück. Scripting ADRCI Wie die meisten Tools von Oracle kann auch ADRCI im Batch Mode aufgerufen werden.
Dies ist insbesondere für das Housekeeping der Homes interessant, bei denen dies nicht, wie beim rdbms Home, automatisch abläuft.
Die Befehle könnten natürlich auch in einem Script enthalten sein:
$ adrci exec="SET HOME listener;SHOW HOME;purge" oder $ adrci script=purge.txt Nützliche Links und Referenzen
|