Трасування сесії oracle

Досить часто необхідно зрозуміти, що ж таке робить та чи інша програма в базі. Та й з точки зору моніторингу продуктивності іноді корисно відстежити виконуються в базі команди і їх наслідки.
Виконується це досить просто.
По-перше, пам'ятайте про параметр 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-я, повна трасування

У випадках, коли сесія різко спливає і схлопивается, можна ловити її на ім'я користувача, наприклад, через тригер на підключення:

Природно, що потрібно потім цей тригер зняти командою

в результаті трасування створюється файлі трасування, який потім можна обробити утилітою tkprof. У прикладі з тригером файлі трасування буде з суфіксом MyTraceIdentifier, що полегшує завдання пошуку трасування файлу серед купи інших.

Схожі статті