我正在寻找一种方法,只存储数据库中添加的表和列,并在日志表中创建它(nachine_name)。
我尝试在sys表RT
上添加一个触发器,但我不能这样做Why cannot I create triggers on objects owned by SYS?
系统表user_objects会给我一个创建表的日期,但我也想知道哪台机器创建了它。我还想跟踪列的创建和修改,并将它们记录在表格中。
这可能吗?有没有办法呢?
答案 0 :(得分:1)
您可以创建数据库事件触发器:
CREATE OR REPLACE TRIGGER log_ddl_event_trg
AFTER DDL
ON DATABASE
DECLARE
v_sql_list ora_name_list_t;
v_sql_txt VARCHAR2(2500);
BEGIN
FOR i in 1..ORA_SQL_TXT(v_sql_list) LOOP
v_sql_txt := v_sql_txt || v_sql_list(i);
EXIT WHEN length(v_sql_txt ) >= 2000;
END LOOP;
...
END;
/
在Trigger中,您可以使用ORA_SQL_TXT()Funktion获取执行的ddl语句,然后将其与其他数据(log_date,user等)一起记录在表中。