[ОТВЕТИТЬ]
Опции темы
23.07.2011 11:58  
OlegON
Достаточно часто необходимо понять, что же такое делает та или иная программка в базе. Да и с точки зрения мониторинга производительности иногда полезно отследить выполняемые в базе команды и их последствия.
Выполняется это достаточно просто.
Во-первых, помните про параметр sql_trace=true и, на всякий, tracefile_identifier. Первый, соответственно, может задаваться для своей сессии или глобально.
Если Вы собираетесь трассировать свою сессию, то выполняйте команду:
alter session set events '10046 trace name context forever, level N';
Цифра в level указывает на уровень трассировки.
level 1 -- в trace файл пишется статистика вида ***, APPNAME, PARSING IN CURSOR, PARSE ERROR, PARSE, EXEC, FETCH, UNMAP, SORT UNMAP, ERROR, STAT и XCTEND
level 4 -- то же, что и в level 1 плюс BINDS секции.
level 8 -- то же, что и в level 1 плюс WAIT строки.
level 12 -- level 1 плюс level 4 плюс level 8.
Выключается трассировка своей сессии так:
alter session set events '10046 trace name context off';

Если Вы собираетесь трассировать чужую сессию, то вызывайте процедуру set_ev из пакета dbms_system:
exec dbms_system.set_ev(sid,serial,10046,N,'');
где sid, serial -- это понятно что, а N -- требуемый level.
Выключается трассировка чужой сессии так:
exec dbms_system.set_ev(sid,serial,10046,0,'');
обычно включается либо 8, либо 12-я, полная трассировка

В случаях, когда сессия резко всплывает и схлопывается, можно ловить ее по имени пользователя, например, через триггер на подключение:
Код:
CREATE OR REPLACE TRIGGER debug_olegon AFTER LOGON ON DATABASE WHEN (SYS_CONTEXT ('USERENV', 'SESSION_USER') in ('ИМЯ_ПОЛЬЗОВАТЕЛЯ'))
BEGIN
   EXECUTE IMMEDIATE 'alter session set tracefile_identifier=''MyTraceIdentifier''';
   EXECUTE IMMEDIATE 'alter session set events ''10046 trace name context forever, level 12''';
END debug_olegon;
ну или так
Код:
CREATE OR REPLACE TRIGGER debug_olegon
AFTER LOGON ON DATABASE
BEGIN
if (SYS_CONTEXT('userenv','session_user')='OLEGON')
then
execute immediate 'ALTER SESSION SET trace_enabled=TRUE';
execute immediate 'ALTER SESSION SET tracefile_identifier=''olegon''';
end if;
end;
Естественно, что требуется потом этот триггер снять командой
Код:
DROP TRIGGER debug_olegon;
в результате трассировки создается трассировочный файл, который затем можно обработать утилитой tkprof. В примере с триггером трассировочный файл будет с суффиксом MyTraceIdentifier, что облегчает задачу поиска трассировочного файла среди кучи других.
 
17.08.2011 17:14  
OlegON
Код:
DBMS_MONITOR.SESSION_TRACE_ENABLE(
    session_id   IN  BINARY_INTEGER DEFAULT NULL,
    serial_num   IN  BINARY_INTEGER DEFAULT NULL,
    waits        IN  BOOLEAN DEFAULT TRUE,
    binds        IN  BOOLEAN DEFAULT FALSE);
Код:
DBMS_MONITOR.SESSION_TRACE_DISABLE(
   session_id      IN     BINARY_INTEGER DEFAULT NULL,
   serial_num      IN     BINARY_INTEGER DEFAULT NULL);
 
 
Опции темы



Часовой пояс GMT +3, время: 13:15.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.