Dsvolk > > Oracle > > Tuning > > Enable Trace My Blog | Search | About
(Not Logged In)
[ welcome! ] [ news ] [ install ] [ jump-jet ] [ app ] [ rac ] [ papers ] [ dba ] [ dvp ] [ racdd4d ] [ oem ] [ statspack ] [ education ] [ tuning ] [ ias ] [ backup ] [ dataprotection ] [ security ] [ oid ] [ options ] [ integration ] [ sales ] [ sun ] [ linux ] [ consulting ] [ faq ]

Много способов включить trace

Соглашение о материалах на этом сайте

Мой oracle blog
true dsvolk!
только используйте не все сразу  

Базируется на : http://www.juliandyke.com/

В таблице ниже несколько способов включить трассировку sql выражений. 

Мои записки: краткое введение для начинающих как получить план запроса, что он содержит, как получить и обработать trc файл с помощью tkprof, как понять результаты обработки.

Не забудьте включить timed_statistics перед сбором trace файла и снять ограничение на размер trace файла !

alter session set timed_statistics=true

alter session set max_dump_file_size=unlimited

И конечно же если Вы хотите знать больше про содержимое trace файла читайте  Optimizing Oracle Performance by Cary Millsap. Глава 1. Читать больше.

N по порядку Способ Примечание 
На уровне экземпляра
1 trace_enabled = TRUE  Устанавливается в init.ora
2 event="10046 trace name context forever, level 8" Устанавливается в init.ora. Уровни ниже:
0 turn tracing off
1 basic tracing (equivalent to ALTER SESSION set sql_trace TRUE)
4 include bind information in the trace
8 include event wait statistics in the trace
12 include both event and bind statistics in the trace

 

3 ALTER SYSTEM SET trace_enabled = TRUE; TRUE|FALSE
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 8'; уровень см. выше
В своей сессии
5 ALTER SESSION SET sql_trace = TRUE; устанавливает уровень трассировки без связанных переменных и ожиданий level =1

TRUE | FALSE

6 ALTER SESSION SET EVENTS '10046 trace name context forever, level 8'; описание уровней см. выше 
7 EXECUTE dbms_session.set_sql_trace (TRUE); TRUE | FALSE
8 EXECUTE dbms_support.start_trace (binds=>true,waits=>true); пакет dbms_support может быть не установлен в БД. Вы найдете его в директории $ORACLE_HOME/rdbms/admin для версии 8.1.7 и выше, ниже на metalink см. Note:62294.1. 
9 oradebug event 10046 trace name context forever, level 4 см. Note:1058210.6

В чужой сессии 

Можно включить timed_statistics и снять ограничение на размер trace файла в чужой сессии:

sys.dbms_system.set_bool_param_in_session( sid => 42, serial# => 1215, parnam => 'timed_statistics', bval => true)

sys.dbms_system.set_int_param_in_session( sid => 42, serial# => 1215, parnam => 'max_dump_intval => 2147483647)

10 EXECUTE dbms_support.start_trace_in_session (9,29); параметры это sid и serial# чужой сессии
11 EXECUTE dbms_system.set_sql_trace_in_session (9,29,TRUE); параметры это sid и serial# чужой сессии а также хотите ли вы включить (TRUE) или выключить трассировку (FALSE)
12 EXECUTE dbms_system.set_ev (9,29,10046,0,''); sid, serial, номер event'а, уровень, имя события (?) 
13

sys.dbms_monitor.serv_mod_act_trace_enable(

service_name => 'APPS1',

module_name => 'PAYROLL',

action_name => 'PYUGEN',

waits => true,

binds => true,

instance_name => null)

Этот способ доступен начиная с  10g. Он помогает решить проблемы возникающие при connection pooling или multitread сервере, когда нам невозможно определить sid и serial# нашей сессии.

источник "How to Activate Extended SQL Trace" by Cary Millsap

Включить трассировку NET*8 (оптимизация сетевого траффика - это важная составляющая оптимизации !)
  TRACE_LEVEL_<CLIENT/LISTENER/SERVER>=(0/4/10/16)

TRACE_DIRECTORY_<CLIENT/LISTENER/SERVER>=<directory name>

LOG_DIRECTORY_<CLIENT/LISTENER/SERVER>=<directory name>

TRACE_TIMESTAMP_<CLIENT/LISTENER/SERVER> = ON 

SQLNET.ORA for client or server, LISTENER.ORA for listener:

см. Note:1030488.6 

Читать про содержимое trace файла.

Хитом сезона конечно является триггер LOGON ON позволяющий включить трассировку при подключении определенного пользователя:

CREATE OR REPLACE TRIGGER SYS.TRACE_A_USER
AFTER
LOGON ON <some_db_user>.SCHEMA
DECLARE
user_sid NUMBER;
user_serial# NUMBER;
user_program VARCHAR2(48);
BEGIN
-- Collect the current user session details.
SELECT sid, serial#, UPPER(program)
INTO user_sid, user_serial#, user_program
FROM v$session
WHERE audsid = USERENV('SESSIONID');
-- Start tracing if the user is running the identified application.
IF user_program = 'SOMECODE.EXE' THEN
-- Enable tracing. Note level 12 tracing includes bind variable
-- and wait statistics.
sys.dbms_system.set_ev(user_sid, user_serial#, 10046, 12, '');
END IF;
END;

Dsvolk > > Oracle > > Tuning > > Enable Trace Last Modified: 19-05-2004 19:30