모든 오라클 버전에서 가능한 방법
자기 세션에 대하여
alter session set timed_statistics = true;
alter session set max_dump_file_size = unlimited;
alter session set sql_trace = TRUE;
또는
exec dbms_session.set_sql_trace(TRUE);
또는
alter session set events ‘10046 trace name context forever, level 8’;
— trace 할 SQL 실행 —
alter session set events ‘10046 trace name context off’;
다른 세션에 대하여
alter system set timed_statistics = true;
alter system set max_dump_file_size = unlimited;
exec dbms_system.set_sql_trace_in_session(sid, serial#, true);
— trace 할 SQL 실행
exec dbms_system.set_sql_trace_in_session(sid, serial#, false);
오렌지 Session Monitor 에서 사용하는 방식
exec dbms_system.set_ev(sid, serial#, 10046, 8, ‘’); <= 8 Level SQL*Trace 설정
exec dbms_system.set_ev(sid, serial#, 10046, 0, ‘’); <= 해제
오라클 8.1.6 이상 버전에서 가능한 방법
자기 세션에 대하여 (dbmssupp.sql 실행하여 dbms_support 패키지 생성)
alter session set timed_statistics = true;
alter session set max_dump_file_size = unlimited;
exec sys.dbms_support.start_trace;
또는
exec sys.dbms_support.start_trace(waits=>TRUE, binds=> TRUE)
— trace 할 SQL문장 실행 —
exec sys.dbms_support.stop_trace;
다른 세션에 대하여
exec dbms_system.set_bool_param_in_session(sid, serial#, parnam=> ’TIMED_STATISTICS’, bval => true);
exec dbms_system.set_int_param_in_session(sid, serial#, parnam=> ‘MAX_DUMP_FILE_SIZE, intval=>2147483647);
exec sys.dbms_support.start_trace_in_session(sid, serial#);
또는
exec sys.dbms_support.start_trace_in_session(sid, serial#, waits=> true, binds=> true)
— trace 할 SQL문장 실행 —
exec sys.dbms_support.stop_trace_in_session(sid, serial#);
오라클 10g 이상 버전에서 가능한 방법
기존 방식처럼 sid, serial# 을 이용하여 세션 기준에 의한 trace 설정
dbmsmntr.sql 을 통해 dbms_monitor 패키지 생성
초기화 파라미터 파일에서 tracefile_identifier = ‘test’ <8.1.7 이상>
=> orcl_ora_560_test.trc
exec dbms_monitor.session_trace_enable (session_id, serial_num, waits, binds);
exec dbms_monitor.session_trace_disable(session_id, serial_num);
service, action, module 기준에 의한 트레이스 설정
exec dbms_monitor.serv_mod_act_trace_enable (service_name, module_name,action_name, waits=>true, binds=>true, instance_name => null);
exec dbms_monitor.serv_mod_act_trace_disable (service_name, module_name,action_name);
<참고> exec dbms_application_info.set_module(‘module name’, ‘action name’);
<참고> exec dbms_application_info.set_action(‘action name’);
oradebug를 활용한 방법
O/S 프로세스 ID 혹은 오라클 프로세스 ID 확인
select s.username, p.spid as os_process_id, p.pid as oracle_process_id
from v$session s, v$process p
where s.paddr = p.addr
and s.sid = :sid;
MS-Windows 환경에서는 p.spid 는 스레드 id 이다.
TRACE
alter system set timed_statistics = true;
oradebug setospid <os_process_id>;
또는
oradebug setmypid;
oradebug unlimit;
oradebug event 10046 trace name context forever, level 8;
— trace 할 SQL문장 실행 —
<참고> oradebug tracefile_name
oradebug event 10046 trace name context off;