使用trace跟踪sql执行情况(转)

本文介绍如何使用Oracle的trace功能来跟踪SQL执行情况,包括自我session跟踪及如何利用DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION过程跟踪其他用户的进程。文章还提供了详细的步骤和示例代码。

            使用trace跟踪sql执行情况

1.跟踪自己的session

alter session set events ‘10046 trace name context forever, level 12′; 执行需要跟踪的sql…. alter session set events ‘10046 trace name context off’; 查看trace文件名字:

select d.value||’/'||lower(rtrim(i.instance, chr(0)))||’_ora_’||p.spid||’.trc’ trace_file_name from ( select p.spid from v$mystat m,v$session s,v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, ( select t.instance from v$thread t,v$parameter v where v.name = ‘thread’ and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from v$parameter where name = ‘user_dump_dest’) d

分析结果 tkprof tracefilename outputfilename 例子

SQL> set time on
22:43:26 SQL> set timing on
22:43:28 SQL> alter session set events ‘10046 trace name context forever,level 12′;

会话已更改。

已用时间: 00: 00: 00.00
22:43:39 SQL> declare
22:44:03 2 v_num integer;
22:44:03 3 begin
22:44:03 4 v_num := 0;
22:44:03 5 while v_num < 10000
22:44:03 6 loop
22:44:03 7 insert into t2 values(v_num,’def’);
22:44:03 8 v_num := v_num + 1;
22:44:03 9 end loop;
22:44:03 10 commit;
22:44:03 11 end;
22:44:03 12 /

PL/SQL 过程已成功完成。

已用时间: 00: 00: 01.18
22:44:06 SQL> alter session set events ‘10046 trace name context off’;

会话已更改。

已用时间: 00: 00: 00.02
22:44:28 SQL> select d.value||’/'||lower(rtrim(i.instance, chr(0)))||’_ora_’
||p.spid||’.trc’ trace_file_name
23:02:28 2 from ( select p.spid from v$mystat m,v$session s,v$process
p
23:02:28 3 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
23:02:28 4 ( select t.instance from v$thread t,v$parameter v
23:02:28 5 where v.name = ‘thread’ and (v.value = 0 or t.thread# = to_num
ber(v.value))) i,
23:02:28 6 ( select value from v$parameter where name = ‘user_dump_dest
‘) d
23:02:29 7
23:02:30 SQL> /

TRACE_FILE_NAME
——————————————————————————–

D:ORACLEPRODUCT10.2.0ADMINORCLUDUMP/orcl_ora_2536.trc

D:oracleproduct10.2.0adminorcludump>tkprof orcl_ora_2536 lyf3.txt

TKPROF: Release 10.2.0.1.0 – Production on 星期日 10月 8 22:39:36 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.

D:oracleproduct10.2.0adminorcludump>

2.了解raw trace的更多内容

可以参看

3. 3. 跟踪其他用户进程
在很多时候我们需要跟踪其他用户的进程,而不是当前用户,这可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION
来完成

SET_SQL_TRACE_IN_SESSION过程序要提供三个参数:

SQL> desc dbms_system

PROCEDURE SET_SQL_TRACE_IN_SESSION
Argument Name Type In/Out Default?
—————————— ———————– —— ——–
SID NUMBER IN
SERIAL# NUMBER IN
SQL_TRACE BOOLEAN IN

通过v$session我们可以获得sid、serial#等信息:

获得进程信息,选择需要跟踪的进程:

SQL> select sid,serial#,username from v$session where username is not null;

SID SERIAL# USERNAME
———- ———- ——————————
10 617 LYF
11 18 SYS

设置跟着:
SQL> exec dbms_system.set_sql_trace_in_session(10,617,true);

PL/SQL 过程已成功完成。

….
可以等候片刻,跟踪session执行任务,捕获sql操作…
在10,617上执行insert into t2 values(‘cc’);

….

停止跟踪
SQL> exec dbms_system.set_sql_trace_in_session(10,617,false);

PL/SQL 过程已成功完成。

到udump目录下,按照日期排序可以看到新生成的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值