【原创】创建DDL触发器捕捉schema所有对象改变的记录

创建记录表
drop table ddl_log_qiang purge;
create table ddl_log_qiang 
(
operation   varchar2(50),                  什么操作
obj_owner   varchar2(50),                  所属用户
object_name varchar2(50),                  操作对象
attempt_dt  date                           发生时间
);
select * from ddl_log_qiang;
SQL> select * from ddl_log_qiang;
OPERATION             OBJ_OWNER             OBJECT_NAME                          ATTEMPT_DT
-------------------------------------------------------------------------- -------------------------------------------------- -----------
DROP                  SINOJFS               TEST1                                2013-6-28 1
CREATE                SINOJFS               TEST1                                2013-6-28 1
ALTER                 SINOJFS               TEST1                                2013-6-28 1
ALTER                 SINOJFS               MV_SINO_PERSON                       2013-6-29 1
ALTER                 SINOJFS               MV_SINO_PERSON_ADDRESS               2013-6-29 1
ALTER                 SINOJFS               MV_SINO_PERSON_EMPLOYMENT            2013-6-29 1
ALTER                 SINOJFS               MV_SINO_PERSON_CERTIFICATION         2013-6-29 1
 

删除DDL触发器
drop trigger tib_ddl_qiang;
创建DDL触发器
create or replace trigger tib_ddl_qiang
before create or drop or alter             在这三个操作之前插入表记录
on schema
declare
oper ddl_log_qiang.operation%type; 
begin
insert into ddl_log_qiang select ora_sysevent,ora_dict_obj_owner,ora_dict_obj_name,sysdate from dual;
end;
/

注:触发器不能调用或者间接调用commit/rollback,触发器中的DML语句会与触发器一起作为一个整体事物,在触发器结束后会自动进行commit。

测试

drop table test1 purge;
create table test1 (x int,y int);
alter table test1 add (z  int); 
select * from ddl_log_qiang;


Leonarding

2013.07.03

北京&summer

分享技术~成就梦想

Blogwww.leonarding.com
请使用浏览器的分享功能分享到微信等