有没有办法在oracle模式中使用执行表创建和列修改的表来记录表创建和列修改?

时间:2016-09-26 11:20:59

标签: oracle

我正在寻找一种方法,只存储数据库中添加的表和列,并在日志表中创建它(nachine_name)。

我尝试在sys表RT上添加一个触发器,但我不能这样做Why cannot I create triggers on objects owned by SYS?

系统表user_objects会给我一个创建表的日期,但我也想知道哪台机器创建了它。我还想跟踪列的创建和修改,并将它们记录在表格中。

这可能吗?有没有办法呢?

1 个答案:

答案 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等)一起记录在表中。