监控数据库中的DDL事件,直接获取终端的IP地址和终端名称,让你确切的知道谁在操作你的数据库!
他到底想做什么!
drop trigger LogDDLActions;
/
drop table ddl_actions;
/

-----------------------------------------------------------------
create table ddl_actions
(who varchar2(100),
what varchar2(2000),
when date,
ip_address varchar2(100),
terminal varchar2(100)
);
/

-------------------------------------------------------------------
CREATE OR REPLACE TRIGGER LogDDLActions
BEFORE DDL ON DATABASE
DECLARE
executor ddl_actions.who%TYPE;
action ddl_actions.what%TYPE;
ipaddr ddl_actions.ip_address%TYPE;
tterminal ddl_actions.terminal%TYPE;
BEGIN
executor := LOGIN_USER;
action := SYSEVENT||' '||DICTIONARY_OBJ_TYPE||' '
||DICTIONARY_OBJ_OWNER||'.'||DICTIONARY_OBJ_NAME;
SELECT DISTINCT TRIM(SYS_CONTEXT('userenv','ip_address')), terminal INTO ipaddr, tterminal
FROM V_$SESSION
WHERE NVL(USERNAME,'NULL') = USER
AND TERMINAL = USERENV('TERMINAL');
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, ipaddr, tterminal);
EXCEPTION
WHEN OTHERS THEN
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, null, null);
END;
/
