Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-11
제목 Client에서 SQL trace를 뜨는 방법
Client에서 SQL trace를 뜨는 방법

EXPLANATION
-----------
오라클을 사용하는 tool 에서 sql trace 를 사용하고자 하면

alter session set sql_trace=true ; 를 사용한다.
또는 dbms_session.set_sql_trace (true) 사용한다.
이는 forms 를 비롯하여 precompiler 를 포함한다.

또 이의 반대는

alter session set sql_trace= false ; 를 사용한다.
또는 dbms_session.set_sql_trace (false) 사용한다.

이 때 실행된 결과는 user_dump_dest 에 쌓이는데 , file 이름은 process 번호를
참고한다.
그러나 MTS 의 경우 trace file 의 구분이 모호해지므로 client를 connect 시
dedicate 로 붙여 trace 를 사용하여야 하며, 만일 다른 session 에서 다른
session의 것을 trace 뜨고 싶으면,

dbms_system.set_sql_trace_in_session 을 사용할 수 있다.

EXAMPLE
--------

이의 사용법은 다음과 같다.

1. Setup

catproc.sql 에서 생성되는 package 와는 달리 dbms_system 의
public synonym 은 생성되지 않고 권한도 부여되지 않는다.
DB 생성 초기에 SYS user 만 reference 할 수 있으므로 이 package 를
사용할 user에게 권한을 부여한다.

예제 : GRANT EXECUTE ON DBMS_SYSTEM to username;

2. v$session 으로부터 SID 와 serial 번호를 부여한다.

SQL> select sid, serial#, osuser, username
2> from v$session;

SID SERIAL# OSUSER USERNAME
-------------------------------------
7 66


3. 원하는 session 에서 SQL trace 를 setting 한다.

exec sys.dbms_system.set_sql_trace_in_session
(12,16631,TRUE);

또는 pl/sql procedure 에서:

begin
sys.dbms_session.set_sql_trace ((,,TRUE);
end

4. session 에서 SQL Trace 를 끝마친다. 이 결과는 user_dump_dest에
쌓인다.

exec sys.dbms_system.set_sql_trace_in_session
(,,FALSE);

또는 pl/sql procedure 에서

begin
sys.dbms_session.set_sql_trace (,,FALSE);
end


만일 os user 가 khpark 인 client 에서 실행하는 sql 의 trace 를 뜨고
싶으면

svrmgrl> select sid,serial#,osuser from v$session
where osuser='KHPARK';

sid serial# osuser
=================================================
8 12 khpark

svrmgr>execute dbms_system.set_sql_trace_in_session (8,12,TRUE);

이렇게 하면 udump 에 trace file 이 생기므로 이를 이용하여 tkprof 를 수행한다.


from otn

---------------------
Comment
등록된 코멘트가 없습니다.