Filterung der Alert.log mittels SQL

03.
November
2007

In unserem Kurs DB-Monitoring beschäftigen wir uns u.a. mit der spannenden Analyse der Alert.log Datei. Wenn Sie die Datei mittels SQL nach Fehlermeldungen durchsuchen möchten, gefällt Ihnen evtl. folgendes Beispiel:

Wir setzen hier das Konzept der External Tables hier ein, um die Datei mittels Select-Befehlen auszulesen.

In unserem Kurs DB-Monitoring beschäftigen wir uns u.a. mit der spannenden Analyse der Alert.log Datei. Wenn Sie die Datei mittels SQL nach Fehlermeldungen durchsuchen möchten, gefällt Ihnen evtl. folgendes Beispiel:

Wir setzen hier das Konzept der External Tables hier ein, um die Datei mittels Select-Befehlen auszulesen.

Dazu sind folgende Vorbereitungen notwendig:

1. Wir müssen den Pfad zur Datei bestimmen

SELECT value FROM v$parameter WHERE name = 'background_dump_dest';

Beispiele (können bei Ihnen, abhängig von der Installation und dem Instanznamen, abweichen)

=> Oracle 9x unter Windows:  E:\oracle\admin\ORA92\bdump

=> Oracle 10.x unter Windows:  E:\oracle\product\10.2.0\admin\o10g\bdump

=> Oracle 11.x unter Windows:  E:\Oracle\diag\rdbms\o11g\o11g\trace

=> Oracle 10.x unter Unix:  /opt/oracle/admin/o10g/bdump

Nun setzen wir ein Directory auf diesen Pfad

Für Windows z.B.:

/* für 10g* / CREATE OR REPLACE DIRECTORY alert_dir AS
'E:\oracle\product\10.2.0\admin\o10g\bdump'; 

/* für 11g * / CREATE OR REPLACE DIRECTORY alert_dir AS 'E:\oracle\diag\rdbms\o11g\o11g\trace';

Für UNIX z.B.:

/* für 10g* / CREATE OR REPLACE DIRECTORY alert_dir AS '/opt/oracle/admin/o10g/bdump'; 

/* für 11g * / CREATE OR REPLACE DIRECTORY alert_dir AS '/opt/oracle/diag/rdbms/o11g/o11g/trace';

2. Wir vergeben Lese- und Schreibrechte an den Benutzer SYSTEM (Schreibrechte sind notwendig wenn z.B. ein Logfile dort abgelegt werden soll)

GRANT READ, WRITE ON DIRECTORY alert_dir TO system;

3. Nun legen wir eine Tabelle vom Typ External auf die Alert.log Datei

Hinweis: Bitte passen Sie den Namen ihrer Instanz an (hier heißt sie o11g)

CREATE TABLE system.alert_ext
(text       VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY alert_dir
ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE
NOBADFILE NODISCARDFILE NOLOGFILE
FIELDS TERMINATED BY '$$' LDRTRIM)
LOCATION ('alert_o11g.log'))
REJECT LIMIT 5000;

Jetzt kann man sich mit einem Select die ganze Datei ansehen, bzw. einen Filter setzen:

SELECT * FROM system.alert_ext WHERE text LIKE 'ORA-%';

4. Aber das Beste kommt zum Schluss. Mit dem nächsten Select können Sie

  • den Zeitstempel sehen, der dem Eintrag in der Alert.log am nächsten kommt. ???
  • über die Zeit filtern (also z.B. Gib mir alle Meldungen der letzten 24 Stunden).

SELECT zeitpunkt, eintrag
FROM (SELECT LAST_VALUE(TO_CHAR(zeitpunkt,'DD.MM.YY HH24:MI:SS') IGNORE NULLS)
       OVER(ORDER BY rownum ROWS UNBOUNDED PRECEDING) AS zeitpunkt, eintrag
   FROM (SELECT rownum,
       CASE WHEN(text LIKE '___ ___ __ __:__:__ 20__') THEN
          TO_DATE(text, 'Dy Mon DD HH24:MI:SS YYYY',
                        'nls_date_language=american')
       END AS zeitpunkt,
       CASE  WHEN(text NOT LIKE '___ ___ __ __:__:__ 20__') THEN text
         END AS eintrag
       FROM system.alert_ext))
WHERE eintrag IS NOT NULL
   AND TO_DATE(zeitpunkt, 'DD.MM.YY HH24:MI:SS') > sysdate -1
   -- AND eintrag LIKE 'SMON%'
/

Für die Beispielausgabe wurde der oben auskommentierte Filter hinzugefügt  (--AND text LIKE 'SMON%')

01.11.07 11:33:17 SMON started with pid=8, OS id=2200
01.11.07 11:33:58 SMON: enabling cache recovery
01.11.07 11:34:00 SMON: enabling tx recovery
01.11.07 17:48:34 SMON started with pid=8, OS id=2196
01.11.07 17:49:14 SMON: enabling cache recovery
01.11.07 17:49:16 SMON: enabling tx recovery

So, und nun viel Spass beim Stöbern in der Alert.log Datei. Beachten Sie jedoch, dass dieses Feature nur funktioniert, wenn die DB in der Open Phase ist.

Für die Überwachung der DB, z.B. um herauszufinden, ob sie noch läuft oder sich mit der Fehlermeldung ORA-0600 verabschiedet hat, ist das Skript nicht zu gebrauchen. Hier müssen externe Sprachen (PHP/PERL/C/C++/Java/Shell Script etc. ) verwendet werden.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.