我想將我的數據庫中的所有錯誤記錄到表中。因此,作爲用戶SYS我寫了下面的代碼:如何在Oracle中開發after serverror觸發器?
CREATE TABLE servererror_log (
error_datetime TIMESTAMP,
error_user VARCHAR2(30),
db_name VARCHAR2(9),
error_stack VARCHAR2(2000),
captured_sql VARCHAR2(1000));
/
CREATE OR REPLACE TRIGGER log_server_errors
AFTER SERVERERROR
ON DATABASE
DECLARE
captured_sql VARCHAR2(1000);
BEGIN
SELECT q.sql_text
INTO captured_sql
FROM gv$sql q, gv$sql_cursor c, gv$session s
WHERE s.audsid = audsid
AND s.prev_sql_addr = q.address
AND q.address = c.parent_handle;
INSERT INTO servererror_log
(error_datetime, error_user, db_name,
error_stack, captured_sql)
VALUES
(systimestamp, sys.login_user, sys.database_name,
dbms_utility.format_error_stack, captured_sql);
END log_server_errors;
但是,當我強迫一個錯誤就像試圖從一個不存在表中選擇它doesn't錯誤記錄在表中。
有什麼辦法檢查觸發器是否觸發?另外,我嘗試創建一個測試表來插入,但它也不起作用,即使將觸發器定義爲自主事務並在觸發器內提交。
感謝, 華
它不起作用。此外,我也嘗試過這種方法,但沒有結果。看起來觸發器沒有觸發。任何其他想法?你知道我該如何檢查觸發器是否被觸發?像LAST_FIRED_TIME列之類的視圖或類似的東西。 謝謝Joaquin – xocasdashdash 2009-02-11 16:21:42