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:
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';
GRANT READ, WRITE ON DIRECTORY alert_dir TO system;
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-%';
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.
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.