请问能不能在ORACLE监控对个别字段的操作,比如当某个字段被修改后,能在后台自动记下修改者的登录用户名,IP地址,及所修改的记录的原值,和新值等

解决方案 »

  1.   

    回答:
    1、可以利用trigger来完成你的操作
    2、trigger可以完成最小单位为行的监测,如果要记录对列的更改,那你需要在trigger中手动比对,比如if :old.col1<>:new.col1 then ...
    3、可以记录用户名,原值,新值,但一定得不到ip
      

  2.   

    用审记可以做,但是如果只针对有限几张表的话,就
    有点小题大做了。
    在相应表上做after update of col1触发器即可,
    当被修改时,记录当前用户、用户计算机名,原值、新值
    都可以
      

  3.   

    一个列子,,但修改a1表的id列时候,进行一定的操作,可能不太一样,可以借鉴一下
    create table a1 (
        id number(8),
        compname varchar2(20),
        compcode varchar2(50),
        chapter  varchar2(50),
        compnumber number(8),
        dealdate  date
    );create table a2 (
        id number(8),
        compname varchar2(20),
        compcode varchar2(50),
        chapter  varchar2(50),
        compnumber number(8),
        dealdate  date
    ); CREATE OR REPLACE TRIGGER tr_bf_test
     BEFORE INSERT OR UPDATE OR DELETE OF ID ON a1 
     FOR EACH ROW
     BEGIN
       IF INSERTING THEN
         INSERT INTO a2
         VALUES(:new.id,:new.compname,:new.compcode,:new.chapter,:new.compnumber,:new.dealdate);
       ELSIF UPDATING THEN
         UPDATE a2 SET id=:new.ID,
                          compname=:new.compname,
                          compcode=:new.compcode,
                          chapter=:new.chapter,
                          compnumber=:new.compnumber,
                          dealdate=:new.dealdate
         WHERE ID = :old.ID;
       ELSE 
         DELETE FROM a2
         WHERE ID = :old.ID;
       END IF;
     END tr_bf_TTRIG;
     /