小弟现在需要做一件事情,要从数据库监测从应用程序里访问数据库的SQL语句(主要是DML),要对一个用户下的所有表都实现监控,并生成每日的统计数据,比如访问数据库最频繁的SQL语句、执行时间最长的SQL语句等等。我尝试过用Oracle的审计,但貌似只能建在一张表或试图上,据说这东西挺消耗性能,不知道如果对所有表都开启审计会不会有问题本人菜菜,望各位大虾指条明路。

解决方案 »

  1.   

    通過Oracle的AWR報告貌似可以產生你要的結果!
      

  2.   

    这些东西都可以从 oracle 的动态性能视图中找到,比如:v$sql, v$session_longops 等等等等,很多。
      

  3.   

    谢谢!这个之前我也简单弄了一下,不过我不知道怎么去找所有执行过的SQL命令,就像日志那样的。而像V$SQL,v$session这些视图好像是即时的,我是说除非我查这些视图的时候,应用程序正好也正在执行一段SQL,这样我才能捕获到。然后我写了一个存储过程,用到了V$SQL,V$SESSION,V$SESSION_WAIT这3个视图,就像做报表统计那样把我想要的结果insert进一张表,这个存储过程利用JOB每5分钟执行一次。思路就是通过尽可能频繁的去查来捕获访问数据库的SQL,其实我自己也知道这么做是有问题的,但因为想不到更好的办法同时也出于尝试还是做了,最后实际效果确实也不理想