일반적으로 sql을 튜닝하고자 할때
sql_trace를 =true로 놓고 sql trace를 뜨게 되는데 보통 해당 trace 파일을 찾고자 할경우
udump 밑에서 ls -rlt로 맨 아래 파일을 찾는데요
여러 사람이 동시에 trace를 뜨게 되면 어느것이 내가 뜬것이 확인이 안되는 경우가 많습니다.
그럴 때 아래 sql을 이용, 응용하면 정확하게 해당 trace파일을 찾을 수 있다.
col "Session Info" form A80
select ' DB Name : '|| para.value || chr(10) ||
' Sid, Serial#, Aud sid : '|| s.sid||' , '||s.serial#||' , '||
s.audsid||chr(10)|| ' DB User / OS User : '||s.username||
' / '||s.osuser||chr(10)|| ' Machine - Terminal : '||
s.machine||' - '|| s.terminal||chr(10)||
' OS Process Ids : '||
s.process||' (Client) '||p.spid||' (Server)'|| chr(10)||
' Client Program Name : '||s.program "Session Info"
from v$process p,v$session s ,v$parameter para
where p.addr = s.paddr
and s.audsid = userenv('SESSIONID')
and para.name = 'db_name'
/
결과 ...
Session Info
------------------------------------------------
DB Name : ORAKLDB
Sid, Serial#, Aud sid : 830 , 2744 , 1286233794
DB User / OS User : SYSTEM / oracle
Machine - Terminal : kldb2 - pts/13
OS Process Ids : 1319077 (Client) 1318312 (Server)
Client Program Name : sqlplus@kldb2 (TNS V1-V3)
위 결과에서 1318312 가 trace발생시 process번호에 해당 하는 겁니다.
경우에 따라
tkprof ora_$1.trc $1.prf sort=fchela,execpu sys=no explain=id/pass
vi $1.prf
와 같은 script를 수정해서 sql 에 대한 trace작업에서 tkprof작업까지 한번에 해결할수 있더군요
소스가 완벽하지는 않네요..
그럼 수고하세요
=================================================================================
위 쿼리를 보기좋게 변경.
select para.value "DB Name"
, s.sid
, s.serial#
, s.audsid
, s.username "DB User"
, s.osuser "OS User"
, s.machine||' - '|| s.terminal "Machine - Terminal"
, s.process "Client Process Ids"
, p.spid "Server Process Ids"
, s.program "Client Program"
from v$process p,v$session s ,v$parameter para
where p.addr = s.paddr
and s.audsid = userenv('SESSIONID')
and para.name = 'db_name'