通过审计监控表的使用

问题描述:如何通过审计监控某些表是否被操作,包括插入,删除,更新,查询

解决方案:使用oracle标准审计
1、设置审计参数audit_trail
2、重启数据库
3、使用audit语句对特定操作进行审计

audit的值为:
none:禁用数据库审计
os:启用审计,将审计信息写到操作系统文件
db:启用审计,将审计信息写到SYS.AUD$表
db_extended:启用审计,将审计信息写到SYS.AUD$表。包括SQLBIND列和SQLTEXT列。

alter system set audit_trail=db scope=spfile;
重启数据库
audit select,insert,update,delete on scott.emp
现在对scott.emp的dml操作就会写在sys.aud$表中

可通过dba_audit_trail和dba_audit_object查看审计报告
select username,
       obj_name,
  to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),
       substr(ses_actions, 4, 1) del,
       substr(ses_actions, 7, 1) ins,
       substr(ses_actions, 10, 1) sel,
       substr(ses_actions, 11, 1) upd
  from dba_audit_object;

ses_actions是一个16位的字符串,每个字符代表特定的操作,16位以此是altre,audit,comment,delete,grant,index,insert,lock,rename,select,update,references和execute。14-16位为保留位,字符s代表成功,f代表失败,b代表成功和失败

关闭审计使用
noaudit select,insert,update,delete on scott.emp;
如果想要查看审计的sql_text和sql_bind列,需要将audit_trail值设置为db_extended

工作原理:
如果你只是想知道某张表是否有插入,更新和删除,可以使用dba/all/user_tab_modifications视图查看。
select table_name,inserts,updates,deletes,truncated from user_tab_modifications;

这个视图并不会马上更新,可以使用dbms_stats.flush_database_monitoring_info过程刷新
exec dbms_stats.flush_database_monitoring_info();

你可能感兴趣的:(oracle,11g性能优化攻略笔记)