当我们想了解一条sql的运行情况时,尤其是性能比较差的时候,就可以通过使用sql_trace来跟踪sql的执行计划,这个工具会将sql的整个过程输出到一个trace文件中,我们就能很容易的知道当前正在执行的sql究竟在做什么。
A:开启当前用户会话的跟踪:
alter session set sql_trace=true;
B:开启指定用户会话的跟踪
Select sid,serial#,username from v$session;--查看所有会话的情况
记下要跟踪用户的sid,serial#,例如某个用户的sid是526,serial#是190
execute dbms_system.set_sql_trace_in_session(526,190,true);
关闭指定用户会话的跟踪
execute dbms_system.set_sql_trace_in_session(526,190,false);
C:找到产生的追踪文件
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 sys.v$thread t, sys.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
文件目录:e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6920.trc
但是udump目录下trc跟踪文件打开后发现信息很乱,不能很快的得到有效信息,我们可以使用tkprof工具使跟踪信息更加条理方便阅读
D:下面是tkprof的命令行
tkprof e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6920.trc e:\out.txt
然后去e:\目录下打开out.txt文件即可