본문 바로가기

ORACLE

ORACLE Trace 뽑는 쉘스크립트

스크립트를 사용해 SQL TRACE 하기


Trace 하는 방법은 여러가지가 있다.

여기서는 autotrace 의 한계를 넘는 sql_trace 를 사용하겠다.

 

첨부한 파일을 보면 총 두개 확장자로 나뉘어진다.

하나는 쉘 스크립트 ( *.sh ) 이며 다른 세가지는 *.sql 이다.

 

m_sct.sh

==========

c_trc_on.sql

c_trc_off.sql

tmp.sql

 

이렇게 구성되어있고 사용법은

$./m_sct.sh script_name    ( !@##%.sql 에서 .sql 부분을 제외한 부분 )

 

m_sct.sh 는 다른 스크립트를 관리하는 부분이다.

c_trc_on.sql , c_trc_off.sql sql_trace 파라미터를 true , false 로 변경해 주는 query 이다.

 

tmp.sql trace 한 결과물을 불러오기 위해 사용한 query 이다.

 

sql_trace alter session 명령어로 활성화 비활성화 하며 그 결과물은 user_dump_dest 에 생성된다.

 

해당 결과물의 이름은 $ORACLE_SID_ora_(SPID).trc 로 떨어진다.

 

위에서 SPID v$process spid 를 말함이며 위에서 만든 tmp.sql 은 현재 세션의 spid를 구하는 query 이다.

현재 세션의 SPID 를 구하기 위해서는 v$process v$session 을 조인해 조건절에 v$mystat 을 사용함으로써 구할 수 있다

 

desc 명령어를 사용해 확인해 보면 v$process spid v$session sid 가 독자적으로 존재한다.

( sid의 경우 다른 view에도 있다. )

 

두개의 테이블은 v$process.addr v$session.paddr 조건으로 조인된다.

v$session paddr process address로 생각하면 떠올리기 쉬워진다.

 

마지막으로 m_sct.sh 를 살펴보면

처음 파트는 기존 파일을 확인하고 삭제하는 부분이며 다음으로 파라미터값이 들어왔는지 확인할 후

DB 에 접속한다.

 

DB 에 접속한 이후는 미리 정의한 스크립트를 사용해 sql_trace = true 적용 후 사용자 스크립트 실행 후

sql_traec = false 로 적용을 한다.

 

다음으로 파일명에 접근해 tkprof 를 사용해 보기 좋게 생성한 후 open 하게 된다.

 

/*+ 아직 사용하는데 불편한 점이 있어 보완이 필요하다 */

 

특히 문자열 함수에서 가라로 한 부분이 비쳐진다. ( grep, sed )

UNIX 명령어 공부가 필요한 시점이다 !

 

사용법은 기본적으로 위에 이야기 한 방법이며 타겟 스크립트가 쉘스크립트와 동일한 위치에 없어도 상관없다.

단 이 경우 절대 경로를 사용해야 한다.

 

ex ) 쉘 스크립트가 /home/oracle/script 밑에 있고 타겟 script /home 밑에 있을 때

       /home/oracle/script 위치에서...

 

       $./m_sct.sh /home/oracle/script/target_script          ( .sql 제외 )

 

 

script를 만들면 몸과 마음이 편하다.