大致步骤如下:
1、首先获得spid、sid、serial#,machine为连接oracle的机器名
SELECT SID FROM V$MYSTAT WHERE ROWNUM =1; --查看当前session的sid
在执行:
select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr =b.addr and a.sid = '190';
spid=6888,SPID是操作系统的进程id。PID是oracle的进程ID。
machine 是机器名。serial# 如果一个SID又被其他的session使用的话,这个数值就会自增1(当一个session结束,另一个session开始使用了同一个sid)
sid 和 serial# 确定一个唯一的会话。
继续往下看,就可以知道为什么找到SPID了;
2、使用10046 事件跟踪
SQL> alter session set events '10046 trace name context forever ,level 12' ; 会话已更改。 --开启本会话的10046事件
3.再跑sql:
4.跑完sql就可以关闭10046
-- 关闭10046事件
SQL> alter session set events '10046 trace name context
off' ;
5.跑下面脚本查看生成的trc文件所在目录:
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;
这里可以看到生成的trc文件是由 实例名_ora_'spid'.trc 组成 直接看这个文件就可以知道spid了。
6.再进入该目录,登录oracle。生成的文件是trc文件需要解析。在命令行下执行oracle的tkprof命令解析
$ tkprof orcl_ora_6888.trc orcl_ora_6888.sql
成功。
就可以在同一目录:g:\app\diag\rdbms\orcl\orcl\trace/
spid为系统的进程号。
下找到最终生成的orcl_ora_6888.sql文件,打开即可。