-- 闲来无事,给你写了一个例子,使用触发器做记录的。
SQL> create table audit_table
  2  (
  3  dropdate date default sysdate ,
  4  object_name varchar2(30)
  5  );表已创建。SQL>
SQL> CREATE OR REPLACE TRIGGER trg_drop_table
  2     BEFORE DROP ON DATABASE
  3  BEGIN
  4  insert into audit_table(object_name) values(ora_dict_obj_name ());
  5
  6  END;
  7  /触发器已创建SQL> create table x(id int , name varchar(20)) ;表已创建。SQL> drop table x ;表已删除。SQL> select * from audit_table ;DROPDATE       OBJECT_NAME
-------------- ------------------------------
29-12月-14     XSQL>

解决方案 »

  1.   

    SQL> select to_char(dropdate,'yyyy-mm-dd hh24:mi:ss') dropdate, object_name
      2  from audit_table ;DROPDATE            OBJECT_NAME
    ------------------- ------------------------------
    2014-12-29 16:26:09 XSQL>
      

  2.   


    忘了说了 我们是非归档模式,闪不回去按我说的那个建立一个触发器吧 2#,看看什么时候给干掉的。 sys_context('userenv','ip_address') , 可以把客户机的IP地址也取出来。
      

  3.   

    使用logminer解析日志,先看看啥时候咋删除的吧
      

  4.   

    CREATE OR REPLACE TRIGGER no_ddl
    BEFORE DROP ON DATABASE
    BEGIN
      insert into tab_mon_midify 
      select sid,username,program,machine,sys_context('userenv','ip_address'),sysdate 
      from sys.v_$session where audsid = userenv('sessionid');
    COMMIT;
      END;我是这么写的触发器,但是drop之后看tab_mon_midify表里面没数据,不明白啥情况啊
      

  5.   


    redo log里面有记录drop这种操作么?听闻10g的log不记录ddl操作另外,这库之前没配置logminer,生产环境想重启要申请很麻烦
      

  6.   

    我在我们库里试了这段sql,drop后没有记录
      

  7.   

    支持做一个 ddl 删除的触发器
      

  8.   


    我们系统全是用的dba权限用户,DDL触发器捕获不到
      

  9.   

    如果时间点固定,那说明有定时的job或其他服务操作,仔细检查一下
      

  10.   


    我们系统全是用的dba权限用户,DDL触发器捕获不到所有用户都是可以记录到的啊。 除非,你是所有的人都用一个账号。 那也可以知道是在什么时间被删除的不是。