大家都知道,对于一个表的delete 、update、 insert操作都是可以通过写触发器来捕捉的。我现在有个问题,就是对于表的一般的select 访问,能不能也通过类似触发器的技术来实现呢?比如说我可以写一个触发器,当我的表A被更新的时候,就往表B里面插入一条数据,那么我能不能写一个什么东西,当我的表A仅仅是被select的时候就往表B里面写入一条数据呢?谢谢各位前辈。
调试欢乐多
audit该表所有dml、ddl,可以实现。
audit_trail 参数的值可以设置为以下几种1. NONE:不开启
2. DB:开启审计功能
3. OS:审计记录写入一个操作系统文件。
4. TRUE:与参数DB一样
5. FALSE:不开启审计功能。
这个参数是写道spfile里面的,需要重启数据库二 查看是否审计功能是否启动
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE三 开启审计
SQL> conn /as sysdba
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONESQL> alter system set audit_sys_operations=TRUE scope=spfile; --审计管理用户(以sysdba/sysoper角色登陆)
SQL> alter system set audit_trail=db,extended scope=spfile;重启实例
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB, EXTENDED
(完成)
具体的使用方法百度或者google一下就有很多很详细的文章
这里就不贴出来了
叫一般人去看这个,我估计头有点大了。我给出一部分通过该试图查询出来的结果:
SELECT ANALYZETIME FROM (SELECT ANALYZETIME FROM TABPART$ T WHERE T.OBJ# = :B1 UNION ALL SELECT ANALYZETIME FROM TABCOMPART$ T WHERE T.OBJ# = :B1 )
以前没有怎么看过审计功能,因为在项目中没有怎么用到过,不过听大家这么一说,我下来一定得花点time去看看这个叫审计的东东。