Datenbankfehler speichern und monitoren
Sie möchten auftretende Fehler in der Datenbank monitoren? Dazu eignet sich beispielsweise die Speicherung von Datenbankfehlern in einer Tabelle, die sich später jederzeit abfragen läßt. Das folgende Skript nutzt dazu einen Datenbank-Trigger, der nach dem Auftreten eines Datenbankfehlers automatisch vom Oracle-Server ausgeführt wird.
DEFINE Monitoring_Owner=system clear screen SET verify off SET linesize 80 PROMPT =================================================== PROMPT = PROMPT = Audit zu Datenbank-Fehlern PROMPT = PROMPT =================================================== PROMPT PROMPT Speicherung von Datenbankfehlern IN der Tabelle PROMPT save_err_audit. Folgende Informationen werden PROMPT gespeichert: Fehler-Informationen, Zeitpunkt des PROMPT Fehler, DB-Benutzer, OS-Benutzer, Quellcomputer, PROMPt Prozess und verursachendes Programm. PROMPT PROMPT Falls die Tabelle save_err_audit bereits existiert, PROMPT wird Sie neu erstellt. PROMPT Wollen Sie fortfahren? PROMPT PROMPT Weiter mit Enter / Beenden mit STRG + C PROMPT PAUSE PROMPT DECLARE l_OBJECT_NAME dba_objects.object_name%TYPE; BEGIN BEGIN SELECT object_name INTO l_object_name FROM DBA_OBJECTS WHERE object_name = 'SAVE_ERR_AUDIT' AND owner = upper('&Monitoring_Owner'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; IF l_object_name = 'SAVE_ERR_AUDIT' THEN EXECUTE IMMEDIATE 'DROP TABLE &Monitoring_Owner..SAVE_ERR_AUDIT'; END IF; END; / CREATE TABLE &Monitoring_Owner..save_err_audit ( errOR VARCHAR2(30), timestamp DATE, username VARCHAR2(30), osuser VARCHAR2(30), machine VARCHAR2(64), process VARCHAR2(8), program VARCHAR2(48)); CREATE OR REPLACE TRIGGER &Monitoring_Owner..catch_err_trigger after servererrOR ON DATABASE DECLARE v_user VARCHAR2(30); v_osuser VARCHAR2(30); v_machine VARCHAR2(64); v_process VARCHAR2(8); v_program VARCHAR2(48); BEGIN SELECT username, osuser, machine, process, program INTO v_user, v_osuser, v_machine, v_process, v_program FROM sys.v_$session WHERE audsid = userenv('sessionid'); INSERT INTO save_err_audit VALUES (dbms_standard.server_error(1), sysDATE,v_user, v_osuser, v_machine, v_process, v_program); END; / DESC &Monitoring_Owner..save_err_audit PROMPT Abfrage bspw. mit: SELECT * FROM save_err_audit; PROMPT ===================================================
Tritt nun beispielsweise ein ORA-1555 (Snapshoot too old) auf, so können Sie auf genauere Informationen der Monitoring-Tabelle zurückgreifen. Die darin gespeicherten Informationen lassen sich natürlich noch gemäß Ihren Anforderungnen anpassen, indem Sie den Trigger und den Tabellenaufbau erweitern.
Stefan Ausmann
info
held-informatik
de