Oracle

刪除外鍵約束是 Oracle 中的事件嗎?

  • November 6, 2017

我在 Oracle 中編寫了以下觸發器:

create or replace trigger foreign_drop before ddl on database
begin
 insert into ddl_log
 select ora_sysevent, ora_dict_obj_owner, ora_dict_obj_name, null, user, 
sysdate
 from dual;
end foreign_drop;

只要發生 DDL 事件,它就會觸發。但是當我刪除外鍵約束時,沒有任何記錄。刪除外鍵約束是否被視為事件?如何記錄刪除外鍵約束的操作?

以下觸發器擷取放置約束操作。

create or replace trigger foreign_drop after create or alter or drop on database
begin
 dbms_output.put_line('DDL Fired!');
end foreign_drop;
/
SQL> set serveroutput on
SQL> CREATE TABLE t2
( id number,
 CONSTRAINT fk_id
   FOREIGN KEY (id)
   REFERENCES t1(id)
);  2    3    4    5    6  
DDL Fired!

Table created.

SQL> alter table t2 drop constraint fk_id;
DDL Fired!

Table altered.

如何記錄刪除外鍵約束的操作?

與其重新發明輪子,不如使用內置的審計支持。

刪除約束是一個ALTER TABLE語句。因此啟用審計和審計ALTER TABLE語句為:

audit alter table;

引用自:https://dba.stackexchange.com/questions/187716