宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒

如何跟踪Oracle中程序调用的SQL语句

上一篇 / 下一篇  2010-08-23 15:41:40 / 个人分类:数据库技术

在程序测试后数据开发数据库是独立开。常常发生在开发环境中运行正常的程序一转到测试环境就不能用了。如果项目是几个开发人员协同开发的,就常常要把所有的人叫来“三方会诊”才能找到是那个模块的问题。因为不能精确定位BUG在沟通中花了大量的时间。查了半天发现可能是少了某个表、字段、存储过程。这个问题当然可以说通过是数据版本的管理来解决。可如能准确的定位问题,不光能节约时间,还能提高测试人员的威信。在MSsql数据库中有事件查看器可以查看到程序调用的SQL语句。对于这样的问题可以比较快的定位。可是对于oracle数据库没有这样的工具怎么办呢?
在网上找了N天发现两种办法。第一种办法:用第三方工具查看程序调用的SQL语句。如OraTracer或SQL Monitor。OraTracer是一个小的程序可以看到应用程序调用的SQL语句。这两个对于应用程序都可以跟踪。不过OraTracer对于服务如tomcat就不能查看到了。SQL Monitor有服务的跟踪。可是不是很好用。
第二种办法:就是用Oracle的系统表V$SQLAREA查看。也就是用管理员用户登陆。运行下SQL语句。
Select SQL_FULLTEXT From V$SQLAREA
Where SQL_ID In (
Select DECODE(SQL_ID,'',PREV_SQL_ID,SQL_ID) From v$session
Where username= 'XX' And program = 'XXX')
或是查看oracle的会话中的SQL
SELECT SE.sid, SE.serial#, PR.spid, SE.status, SUBSTR(SE.program, 1, 10) PROG, 
  SUBSTR(SE.machine, 1, 10) MACH, 
  SQ.sql_text
FROM v$session SE, v$sqlarea SQ, v$process PR
WHERE SE.paddr = PR.ADDR(+)
  AND SE.sql_address = SQ.address(+)
  AND schemaname <> 'SYS'
ORDER BY SE.sid
当然还有写成日志看看

TAG:

 

评分:0

我来说两句

Open Toolbar