oracle 10046
在当前session中激活10046事件,会在user_dump_dest目录下生成“实例名_ora_当前session的spid.trc文件”
在当前session中执行目标sql
在当前session关闭10046事件
激活10046
alter session set events '10046 trace name context forever ,level 12'
oradebug setmypid
oradebug event 10046 trace name context forever ,level 12
oradebug tracefile_name
关闭10046
alter session set events '10046 trace name context off'
oradebug event 10046 trace name context off
通过oradebug tracefile_name可以查看trc文件的路径及名称
我们用 10046 事件也能完成 SQL 跟踪,只需要将“ alter session set sql_trace=true”
换成“ alter session set events "10046 trace name context forever, level 1" ”,
就可以完成一模一样的工作,这条语句也是开启 SQL 跟踪。结束跟踪的语句是:
alter session set events "10046 trace name context off";
为了方便我们找到trc文件,可以使用
alter session set
tracefile_identifier
='feng'
Oracle 为了帮助我们阅读 SQL 的跟踪文件,专门
提供了一个 TKPROF 工具,在操作系统命令提示符下(注意不是在 SQLPLUS 中),输入如下命令:
C:\>tkprof E:\ORACLE\PRODUCT\10.2.0\ADMIN\JJONE\UDUMP\jjone_ora_3600.trc sql1.txt
使用10046trace 跟踪PL/SQL
set linesize 266
set timing on
set pagesize 5000
alter session set events '10046 trace name context forever,level 12';
---此处执行你的存储过程、包等。
alter session set events '10046 trace name context off';
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;
查看某一个回话的硬解析次数
select sid from v$mystat where rownum=1;
select name,value from v$sesstat a ,v$statname b where a.statistic#=b.statistic# and b.name like 'parse count%' and a.sid=41