[@more@]
怎么捕获整个数据库的DDL语句或者是说对象结构变化与修改[A]可以采用DDL触发器,如
怎么捕获整个数据库的DDL语句或者是说对象结构变化与修改[A]可以采用DDL触发器,如
CREATE OR REPLACE TRIGGER tr_trace_ddl
AFTER DDL ON DATABASE
DECLARE
sql_text ora_name_list_t;
state_sql ddl$trace.ddl_sql%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql||sql_text(i);
END LOOP;
INSERT INTO ddl$trace(login_user,ddl_time,ip_address,audsid,
schema_user,schema_object,ddl_sql)
VALUES(ora_login_user,SYSDATE,userenv('SESSIONID'),
sys_context('USERENV','IP_ADDRESS'),
ora_dict_obj_owner,ora_dict_obj_name,state_sql);
EXCEPTION
WHEN OTHERS THEN
sp_write_log('Capture DDL Excption:'||SQLERRM);
END tr_trace_ddl;
在创建以上触发器时要注意几点
1、必须创建一个ddl$trace的表,用来记录ddl的记录
2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8643300/viewspace-896193/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8643300/viewspace-896193/