【原創】建立DDL觸發器捕捉schema所有物件改變的記錄

leonarding發表於2013-07-03
建立記錄表
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

分享技術~成就夢想

Blog

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

相關文章