为了转储跟踪和errorstacks信息,可以使用操作系统进程ID或者oracle进程ID.比如可以通过oracle的sid来查询到操作系统进ID:
SELECT p.pid, p.SPID,s.SID FROM v$process p, v$session s WHERE s.paddr = p.addr AND s.SID = &SID;
SPID是操作系统标识符
SID是oracle会话标识符
PID是oracle进程标识符
比如一个SPID是1254,pid是56如果使用SPID来生成转储和errorstacks信息可以执行下面的语句:
connect / as sysdba ALTER SESSION SET tracefile_identifier = 'STACK_10046'; oradebug setospid 1254 oradebug unlimit oradebug event 10046 trace name context forever,level 12 oradebug dump errorstack 3 oradebug dump errorstack 3 oradebug dump errorstack 3 oradebug tracefile_name oradebug event 10046 trace name context off
如果使用PID来生成转储和errorstacks信息可以执行下面的语句:
connect / as sysdba ALTER SESSION SET tracefile_identifier = 'STACK_10046'; oradebug setpid 56 oradebug unlimit oradebug event 10046 trace name context forever,level 12 oradebug dump errorstack 3 oradebug dump errorstack 3 oradebug dump errorstack 3 oradebug tracefile_name oradebug event 10046 trace name context off
其中oradebug tracefile_name命令会显示跟踪文件的名字和位置,在生成的跟踪文件名字会包含STACK_10046字符
如果要对当前会话收集errorstacks信息首先要找出当前会话的SPID或PID可以执行如下语句来获得:
SELECT p.pid, p.SPID,s.SID FROM v$process p, v$session s WHERE s.paddr = p.addr AND s.audsid = userenv('SESSIONID') ;
或者
SELECT p.pid, p.SPID,s.SID FROM v$process p,v$session s WHERE s.paddr = p.addr AND s.SID = (SELECT DISTINCT SID FROM V$MYSTAT);