본문 바로가기

카테고리 없음

ORACLE TRACE SCRIPT

ORACLE TRACE SCRIPT v1.0

 

from

 

1.    ORACLE TRACE

전번에서 SQL TRACE 의 한 방법으로 쉘스크립트를 만든적이 있지만 지금돌이켜보면 상당히 복잡하고 조악했다. ;;

 

전번의 트레이싱 방법이 스크립트를 파일로 만들어 놓고 이를 입력으로 쉘을 실행하면 TKPROF 결과가 바로 오픈 되는 방법이었다. 이런 프로세스 자체를 보면 그리 복잡해보이진 않지만 UNIX 파일 시스템 내부에 TEMP 파일을 흩뿌려놓는 단점이 있었다.

 

이번의 방법은 전보다 (어디까지나 상대적으로…) 단순하다.

 

2.    SCRIPT 내용

실명은 감추도록 하겠다. ㅎㅎㅎ

스크립트 파일은 첨부하니 COPY&PASTE 해서 저장하는 삽질은 하지 마시길

 

--Script for Tracing SQL Query

--Made by Lee **** ***

--2010/03/05

--***************************************************************

--used in UNIX Environment

--This file needs SQL query : input variable is 'trc_target.sql'

--This script produces temp file : 'command_for_trace.tmp'

--This script deletes original raw trace file after using tkprof

--***************************************************************

--*아래의 익명 프로시저는 SESSION SPID USER_DUMP_DEST 를 알아낸다.

var l_spid varchar2(20)

var l_addr varchar2(50)

 

begin

   select spid into :l_spid from v$process

   where addr =(

   select paddr from v$session

   where sid = (select sid from v$mystat where rownum = 1)

   );

 

   select value into :l_addr from v$parameter

   where name = 'user_dump_dest';

end;

/

 

--*결과 확인용으로 넣은 구문이다. 삭제해도 무관하다.

-- evaluating value (spid, dump_dest)

select :l_spid, :l_addr from dual

/

 

prompt Paste Query and Exit Using ctrl+c

--* TRACE 뜨고 싶은 쿼리를 붙여넣는다. 종결자로는 ; 대신 / 를 사용해 넣는다.

--* 여기에 붙여넣은 쿼리는 임시파일로 저장되기 때문에 VARIABLE 을 사용하는 것도

--* 가능하다.

!cat > trc_target.sql

 

--* 트레이스 개시

alter session set events '10046 trace name context forever,level 12'

/

 

--* 타겟 쿼리 실행

-- tracing target

@trc_target

 

--* 트레이스 종료

alter session set events '10046 trace name context off'

/

 

--* TKPROF 를 실행하기 위한 명령어 생성

spool command_for_trace.tmp replace

select 'echo `tkprof '||:l_addr||'/'||'*'||:l_spid||'* result.txt`' from dual

/

spool off

 

!cat command_for_trace.tmp | grep tkprof > command_for_trace.tmp

 

--* 위에서 생성한 쉘스크립트에 실행권한 부여

!chmod 700 command_for_trace.tmp

 

--* 스크립트 수행

!./command_for_trace.tmp

 

--* 요약된(TKPROF 가 수행된) 결과 조회

!vi result.txt

 

3.    SCRIPT 사용방법

이라고 해도 위에 다 이야기 한 것 같은 기분이 든다. 쉘스크립트를 이용하는 만큼 수행환경은 UNIX 이다. 임시로 생성되는 파일은 trc_target.sql command_for_trace.tmp 파일이다. 수행방법은 telnet 등을 통해 서버와 세션을 맺은 후 sqlplus 로 오라클과 세션을 맺는다. 그 후 위 쿼리(@trc.sql) 를 실행하면 쿼리를 붙여넣으라고 메시지가 뜬다. 이때 하나의 sql 파일로 정의했을 때 정상적으로 수행이 되는 내용을 붙여넣고 ctrl+c 를 입력하면 쿼리에 대한 요약본(tkprof) 이 오픈된다.