system trigger中的servererror事件驗證

warehouse發表於2010-01-22
我們可以使用系統觸發器中提供的servererror事件來捕獲系統產生的錯誤...[@more@]

--t_trace是一個跟蹤表,使用者記錄由trigger捕獲的資訊

SQL> desc test1.t_trace;
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------

USERNAME VARCHAR2(10)
TERMINAL VARCHAR2(10)
IP VARCHAR2(20)
TIME DATE
ACTION VARCHAR2(30)
ERRORMSG VARCHAR2(100)

--========================create or replace trigger trigg_system
after servererror on database

declare
begin
insert into t_trace values(sys.login_user,
sys_context('userenv','terminal'),
sys_context('userenv','ip_address'),
sysdate,
sys.sysevent,
DBMS_UTILITY.FORMAT_ERROR_STACK

);
end trigg_system;

--================================

測試如下:

SQL> INSERT INTO TEST1.T1 SELECT * FROM TEST1.T1;
INSERT INTO TEST1.T1 SELECT * FROM TEST1.T1
*
第 1 行出現錯誤:
ORA-01653: 表 TEST1.T1 無法透過 128 (在表空間 TEST 中) 擴充套件


SQL> select * from t_trace;

USERNAME TERMINAL IP TIME
---------- ---------- -------------------- --------------
ACTION
------------------------------
ERRORMSG
--------------------------------------------------------------------------------

TEST1 XYS 16.158.103.210 22-1月 -10
SERVERERROR


SQL>

--這裡發現trigger已經觸發了...

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1030812/,如需轉載,請註明出處,否則將追究法律責任。

相關文章