Oracle 11g 监控单张表的增删改查操作

前言:
线上Oracle数据库有张表的数据有些乱,根据应用db的log和应用的log也没有检查出来谁修改了,所以决定把这张单表做个详细的insert、update、delete监控。

一:使用数据库自带的审计功能
1,查看审计功能是否启动
SQL> show parameter audit                                                                                                                                                                     


NAME    TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest    string /oracle/app/oracle/admin/power
des/adump
audit_sys_operations    boolean FALSE
audit_syslog_level    string
audit_trail    string NONE
SQL>
没有开启审计功能,需要自己去开启一下。


2,开启审计功能
需要用sysdba,注意audit_trail要为DB_EXTENDED才记录执行的具体语句...
alter system set audit_sys_operations=TRUE scope=spfile;
SQL> alter system set audit_sys_operations=TRUE scope=spfile;                                                                                                                                 
                                                                                                                                                                                             
System altered.


SQL>

再次查看审计功能是否启动
SQL> show parameter audit;                                                                                                                                                                   


NAME    TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest    string /oracle/app/oracle/admin/power
des/adump
audit_sys_operations    boolean FALSE
audit_syslog_level    string
audit_trail    string NONE
SQL>         


需要重启实例才能看到状态。


3,关闭审计功能
SQL> alter system set audit_trail = none scope=spfile;


4,针对某张表的审计功能
AUDIT UPDATE,DELETE,INSERT ON T_TEST by access;


5,对该张表进行各种DML操作测试


6,查询审计的信息
select EXTENDED_TIMESTAMP,SESSION_ID,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL ORDER BY EXTENDED_TIMESTAMP DESC;


二,采用触发器
        看到线上数据库load比以前增加蛮多的,为了单张表的监控开启审计比较消耗资源,有些不划算,所以可以采用另外一种办法来做,就是在表上建立触发器。

1,先建立建立测试表:
查看已经建立的表 aaa_test与trig_sql。
SQL> describe plas.aaa_test;                                                                                                                                                                 
 Name  Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID    NUMBER
 NAME    VARCHAR2(100)
 LOGIN_TIME    DATE

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/431da10824d4679a4128fc13a1487878.html