27 мар. 2008 г.

Трассировка сессий в Oracle

Кратко о включении трэйсов (начиная с 10g):
Куда складываются трэйсы можно увидеть коммандой sqlplus'a:
show parameter user_dump_dest

"Пометить" свой трэйс можно так:
alter session set tracefile_identifier ="alp";

Включить трэйс для текущей сессии:
dbms_monitor.session_trace_enable();
Чтобы в трэйс включались переменные подстановки:
dbms_monitor.session_trace_enable(BINDS => true);
Для чужой сессии нужно знать SID и SERIAL# (смотрится в V$SESSION):
dbms_monitor.session_trace_enable(SID, SERIAL);

Запрос для извлечения полного пути к трэйсу:
select
u_dump.value || '/' ||
db_name.value || '_ora_' ||
v$process.spid ||
nvl2(v$process.traceid, '_' || v$process.traceid, null )
|| '.trc' "Trace File"
from
v$parameter u_dump
cross join v$parameter db_name
cross join v$process
join v$session
on v$process.addr = v$session.paddr
where
u_dump.name = 'user_dump_dest' and
db_name.name = 'db_name' and
v$session.sid = :SID and
v$session.serial# = :SERIAL
/


Не забываем выключать трэйсы с помощью аналогичных disable процедур.
Ну и вообще, смотрим документацию на пакет dbms_monitor.
Можно включать трассировку, например, для всех ссессий с определенным MODULE или ACTION и т.д.

Для обработки трэйсов применяем trcsess для консолидации нужной информации из выбранных трэйсов (удобно при shared соединениях или пулах коннектов). И затем tkprof.

Комментариев нет: