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.