如何知道封装类所执行的SQL语句?

danielxiao.spaces.live.com/blog/cns!FAABA4EEE25A494D!208.entry#comment
如果我们使用的是第三方组件或者类,不知道源代码,但是又想知道在这些类当中执行了哪些SQL语句,那么能采用的办法除了使用“小颖”之类的工具之外,就只能在Oracle上想办法了。

    我们可以利用oracle本身的10046事件来跟踪SQL语句。
 
步骤如下:
 
1、首先启动您的web应用
 
2、在Oracle上获得spid、sid、serial#,machine为你的机器名
 
SQL> select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr = b.addr and a.machine='your_name';
SPID SID SERIAL# MACHINE
9497 115 10347 your_name
 
注意:有的时候,您的应用可能会有多个session,这就要你自己去判断了。
 
2、利用10046事件开始跟踪

--SQL>execute sys.dbms_system.set_ev(115, 10347,10046,1,'');
SQL> exec sys.dbms_system.set_sql_trace_in_session(115, 10347, TRUE);
PL/SQL procedure successfully completed.

3、这时候你可以运行web 应用,执行一些与数据库交互数据的动作。

4、然后,如果你需要查看这段时间web应用到底执行了哪些sql语句,就可以执行下面的语句结束跟踪

--SQL>execute sys.dbms_system.set_ev(115,10347,10046,0,'');
SQL> exec sys.dbms_system.set_sql_trace_in_session(115, 10347, FALSE);
PL/SQL procedure successfully completed.

5、SQL trace 工具会收集这个过程中执行的SQL的性能状态数据,记录到一个跟踪文件中.这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等。

6、这时候你可以通过下面的语句获得产生的跟踪文件所在的目录
SQL> select value from v$parameter where name = 'user_dump_dest';
VALUE
--------------------------------------------------------------------------------
c:\oracle\my_database\udump

7、在c:\oracle\my_database\udump下找到your_nameoracle_ora_9497.trc。9497是你当前应用的spid。

8、注意your_nameoracle_ora_9497.trc是不能直接读取的,我们需要执行oracle的tkprof命令(这是MS-DOS命令),将your_nameoracle_ora_9497.trc转化为我们可读的文本文件。
 
c:\tkprof your_nameoracle_ora_9497.trc your_nameoracle_ora_9497.sql
 
这样你就可以在your_nameoracle_ora_9497.sql文件中看到所有的sql语句执行次数,CPU使用时间等数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值