数据库中没有对修改记录留痕迹的设计,要求用其他开发工具,做到当修改记录时候,自己写一段处理代码。
    插入的时候痕迹明显,可以用唯一ID来获取,但是修改的时候就感觉无从下手了,现正尝试用Oracle中自带的操作日志来实现,但是资料还搜集不全。
    那位大大有关于ORacle自带操作日志的相关资料,以及其他方法的请多多赐教。

解决方案 »

  1.   

    oracle的审计功能对你应该有帮助
      

  2.   

    Creating a DDL Trigger: ExampleCREATE TRIGGER audit_db_object 
    AFTER CREATE  ON SCHEMA
    begin
    insert into aa values(sys.ojbect_name,....);
    end;
    /
    把创建对象数据插到aa表上
      

  3.   

    触发器和oracle的AUDIT可以实现,但有性能影响
      

  4.   

    正在找Oracle方面是否 有监控某 个表的操作的方法,有没有了解过的大大赞助一下相关资料,或者提出另外的方法~谢谢
      

  5.   

    jiezhi:
         可以描叙下Oracle的审计功能么?
      

  6.   

    用如下的方式可以審計執行drop動作的事件:
    /**
     * drop語句的審計日誌表
     */
    create table drop_log
    (
        session_id int not null,  -- sessionid
        drop_time  date,  -- drop的時間
        ip_address varchar2(20),  -- ip地址
        object_owner varchar2(30),  -- 對象的擁有者
        object_name varchar2(30),  -- 對象名稱
        object_type varchar2(20),  -- 對象類型
        drop_by_user varchar2(30) -- 執行drop語句的用戶
    );create or replace trigger drop_info 
    after drop on mfg0513user.schema  -- 在mfg0513user用戶上創建審計drop的觸發器
    begin 
        insert into drop_log
         (session_id,
         drop_time,
         ip_address,
         object_owner,
         object_name,
         object_type,
         drop_by_user)
         values(USERENV('SESSIONID'),
         sysdate,
         SYS_CONTEXT('USERENV','IP_ADDRESS'),
         sys.dictionary_obj_owner,
         sys.dictionary_obj_name,
         sys.dictionary_obj_type,
         sys.login_user);    
    end;執行drop的語句我沒有辦法給你抓出來,就像你說的那樣,v$sql不紀錄DDL語句,
    不過對象名稱和對象類型都可以抓出來,我想這對你來說應該足夠了.另外:create和alter動作都可以按照上面的方式建類似的表和類似的觸發器做到.
    希望對你有所幫助.
      

  7.   

    感谢beckhambobo(beckham)兄Oracle审计功能的解释~帮助肯定是有的~虽然不在这个项目上~