스크립트를 사용해 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를 만들면
몸과 마음이 편하다.