监控数据库中的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 LogDDLActionsBEFORE 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 ; /