Если пользователи используют базу через вебинтерфейс приложения, запущенного под каким-то пользователем 'user', то можно использовать хотя бы LOGON_TIME для идентификации sid'а интересующей сессии, по которой нужно сделать трассировку.
Например, для включения трассировки своей сессии, запускаем веб-приложение, регистрируемся и включаем трассировку след.образом:
select sid,serial#,osuser,TO_CHAR(logon_time, 'DD.MM.YYYY HH24:MI') "logon_time" from v$session where osuser='user';
Определяем по logon_time свою сессию и включаем трассировку своей сессии
exec sys.dbms_system.set_ev(sid,serial,10046,12,'');
и повторяем проблемные "щелчки", о которых сообщил юзер
===========
Также полезно использовать триггер after logon на включение трассировки
(после трассировки не забыть отключить его через alter trigger trace_login_trigger disable)
CREATE OR REPLACE TRIGGER trace_login_trigger
AFTER logon ON DATABASE
BEGIN
IF (USER = <'USERNAME'>) THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name
context forever, level 12';
END IF;
END;
Subscribe to:
Post Comments (Atom)
2 comments:
Иногда в таком случае полезно включить множественную трассировку сессий по пользователю
--Скрипт для включения трассировки всех сессий пользователя USER
begin
For pList in (select sid,serial# from v$session where username='USER') loop
sys.dbms_system.set_ev(pList.sid,pList.serial#,10046,12,'');
End loop;
end;
--Скрипт для выключения трассировки всех сессий пользователя USER
begin
For pList in (select sid,serial# from v$session where username='USER') loop
sys.dbms_system.set_ev(pList.sid,pList.serial#,10046,0,'');
End loop;
end;
В 10gR2 удобнее и безопаснее использовать пакет dbms_monitor.
select sid,serial# from v$session;
exec dbms_monitor.session_trace_enable(144, 253, TRUE, FALSE);
Post a Comment