请教满足下面需求的一个触发器:监控对数据库中所有表的DML操作语句的触发器,并记录到如下的表中:
TABLE_OWNER 表用户
TABLE_NAME 表名
OPER_FLAG 操作类型(INSERT,UPDATE,DELETE,MERGE)
DML_TEXT 操作语句
SYS_TIME 操作时间
CLIENT_HOST 机器名因为在网上找到的都是基于单表的触发器,但是现在数据库中有上千张表,所以不清楚对全数据库表监控的触发器应如何写,请高手们指教了

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER dml_log
       BEFORE DELETE OR INSERT OR UPDATE
       ON 表名
       FOR EACH ROW
    BEGIN
       IF INSERTING
       THEN
          INSERT INTO logs
            VALUES   (USER,
                      'emp',
                      'insert',
                      SYSDATE,
                      );
       ELSIF DELETING
       THEN
          INSERT INTO logs
            VALUES   (USER,
                      'emp',
                      'insert',
                      SYSDATE,
                      );
       ELSE
          INSERT INTO logs
            VALUES   (USER,
                      'emp',
                      'insert',
                      SYSDATE,
                      );
       END IF;
    END;
      

  2.   

    不好意思,发错了。重发个
    CREATE OR REPLACE TRIGGER dml_log 
      BEFORE DELETE OR INSERT OR UPDATE 
      ON 表名 
      FOR EACH ROW 
    BEGIN 
      IF INSERTING 
      THEN 
          INSERT INTO logs 
            VALUES  (USER, 
                      'emp', 
                      'insert', 
                      SYSDATE, 
                      ); 
      ELSIF DELETING 
      THEN 
          INSERT INTO 表名
            VALUES  (USER, 
                      'emp', 
                      'delete', 
                      SYSDATE, 
                      ); 
      ELSE 
          INSERT INTO 表名 
            VALUES  (USER, 
                      'emp', 
                      'update', 
                      SYSDATE, 
                      ); 
      END IF; 
    END; 
      

  3.   

    该监控策略不适应于生产系统,会给正常运行的生产系统带来非常的性能影响,建议通过statspack来解决性能问题