Extended SQL Trace

게시 날짜: 2011/11/03, 카테고리: ADMIN, ORACLE

SQL을 튜닝하거나 현재 돌아가는 SQL이 어떤 상태인지 확인해 보고 싶을때 SQL을 추적한다. 이 추적하는 방법은 전에도 포스팅한 autotrace 를 사용하면 별다른 복잡한 과정 없이 쉽게 SQL을 트레이스 할 수 있다. 하지만 SQL을 트레이스 하는 방법은 그 외에도 여러가지가 있는데 이번에 그 방법들에 대해서 포스팅 해 볼 생각이다.

소위 SQL 트레이싱을 할때 어떤 부분까지 트레이싱을 할 것인가에 대한 공통된 파라메터가 있다. 바로 level 값이다. 이 level 값에 의해서 어느 수준까지 SQL을 분석할지 결정을 내린다.

  • LEVEL 1 – 실행정보만 저장
  • LEVEL 4 – Level 1 + 바인드 변수
  • LEVEL 8 – Level 1 + 대기정보
  • LEVEL 12 – Level 4 + Level 8

 

1. Using ALTER Command

가장 정확한 정보를 얻기 위해서는 Level 12 가 좋을 것이다. 하지만 그만큼의 부하는 감소하여야 할 것이다. sqlplus 등을 통해 진단 이벤트를 발생시키기 위해서는 다음 명령을 사용한다.

SQL> alter session set event ‘10046 trace name context forever, level 12’;  — 트레이스 시작
SQL> alter session set event ‘10046 trace name context off’; — 트레이스 끝

해당 방법은 현재 세션에서 돌아갈 SQL에 대한 분석이다.

 

2. Using DBMS_SYSTEM Package

dbms_system 패키지를 사용하여 다른 세션에 대해서 트레이스를 수행 할 수 있다.

SQL> exec dbms_system.set_bool_param_in_session (sid=> sid ,parname=>’TIME_STATISTICS’ ,bval=>true);
SQL> exec dbms_system.set_int_param_in_session (sid=> sid, serial=> serial, parname=>’MAX_DUMP_FILE_SIZE’, interval=2147483647);
SQL> exec dbms_system.set.set_ev(sid, serial#, 10046, 12, ”);

 

3. Using DBMS_MONITOR Package (over 10g)

SQL> exec dbms_monitor.client_id_trace_enable (client_id=>’ ..’, waits=>true, binds=>true);
SQL> exec dbms_monitor.serv_mod_act_trace_enable(…);
SQL> exec dbms_monitor.session_trace_enable(…);

 

4. Using ORADEBUG

SQL> oradebug setospid xxxx (or oradebug setorapid xxx)
SQL> oradebug unlimit
SQL> oradebug event 10046 trace name context forever, level 12
SQL> oradebug event 10046 trace name context off

 

from OWI in Oracle 10g (조동욱)

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중