2018.07.26
Ddl trigger
目次
- 1. DDL Triggerとは
- 2. 使用例
- 3. 関連情報
DDL Triggerとは
DDL Triggerを用いてDDL追跡することができます。
使用例
DDL Triggerを利用してのDDL追跡
DDL Trigger内で使用可能なコンテキスト情報は、次のような一連の関数でアクセス可能です。
・ora_sysevent ・ora_login_user ・ora_dict_obj_type ・ora_dict_obj_owner ・ora_dict_obj_name ・ora_sql_txt
DDL Triggerを利用してDDLを追跡する方法は、以下のMetalink Noteを参照してください。
HOW TO CAPTURE ALL THE DDL STATEMENTS
CREATE TABLE DDL_ACTIONS ( counter number(38) ,user_name VARCHAR2(4000) ,ddl_date VARCHAR2(26) ,ddl_type VARCHAR2(4000) ,object_type VARCHAR2(4000) ,owner VARCHAR2(4000) ,object_name VARCHAR2(4000) ,sqltext CLOB ); create or replace trigger DDLTrigger AFTER DDL ON DATABASE declare l_cnt BINARY_INTEGER := 0; l_len integer := 0; l_no integer := 1; l_s varchar2(32767) := ''; l_sql_text ora_name_list_t; BEGIN l_cnt := ora_sql_txt(l_sql_text); for i in 1..l_cnt loop if l_cnt = 1 then insert into DDL_ACTIONS ( counter ,user_name ,ddl_date ,ddl_type ,object_type ,owner ,object_name ,sqltext ) VALUES ( i ,ora_login_user ,to_char(systimestamp,'yyyy.mm.dd hh24:mi:ss.FF') ,ora_sysevent ,ora_dict_obj_type ,ora_dict_obj_owner ,ora_dict_obj_name ,l_sql_text(i) ); else if l_len + length(l_sql_text(i)) > 32767 then -- insert insert into DDL_ACTIONS ( counter ,user_name ,ddl_date ,ddl_type ,object_type ,owner ,object_name ,sqltext ) VALUES ( l_no ,ora_login_user ,to_char(systimestamp,'yyyy.mm.dd hh24:mi:ss.FF') ,ora_sysevent ,ora_dict_obj_type ,ora_dict_obj_owner ,ora_dict_obj_name ,l_s ); l_len := length(l_sql_text(i)); l_s := l_sql_text(i); l_no := l_no + 1; else -- concat l_s := l_s||l_sql_text(i); l_len := l_len + length(l_sql_text(i)); end if; end if; end loop; if l_s != '' then insert into DDL_ACTIONS ( counter ,user_name ,ddl_date ,ddl_type ,object_type ,owner ,object_name ,sqltext ) VALUES ( l_no ,ora_login_user ,to_char(systimestamp,'yyyy.mm.dd hh24:mi:ss.FF') ,ora_sysevent ,ora_dict_obj_type ,ora_dict_obj_owner ,ora_dict_obj_name ,l_s ); end if; end; /
関連情報
1.Executing DDL in the DDL trigger