Янв 282011
 

В некоторых случаях, например, когда к базе подключается приложение, возникает необходимость снимать трассировку сессии с самого начала, и нет возможности ни включить трассировку из этой сессии, ни из другой, как описано здесь. Тогда решением будет создание триггера на событие Logon:

CREATE OR REPLACE TRIGGER sys.logon_trace_trigger
	AFTER LOGON ON cube.SCHEMA
DECLARE
	s1 NUMBER;
	s2 NUMBER;
	os VARCHAR2(256);
BEGIN
	SELECT 
		TO_NUMBER(TO_CHAR(sid)) sid,
		TO_NUMBER(TO_CHAR(DECODE(SIGN(serial#), 
			-1, 
			65536 + serial#, 
			serial# ))) ser#, 
		osuser
	INTO s1, s2, os
	FROM sys.v_$session
	WHERE TYPE != 'BACKGROUND'
		AND audsid = USERENV('sessionid')
		AND ROWNUM = 1
		AND ( ADDITIONAL_CONDITIONS );
 
	EXECUTE IMMEDIATE 'ALTER SESSION SET TRACEFILE_IDENTIFIER=my_trig_trace';
	SYS.DBMS_SYSTEM.SET_EV(s1, s2, 10046, 12, '');
 
	EXCEPTION WHEN OTHERS THEN NULL;
END;
/

Выражение AFTER LOGON ON cube.SCHEMA означает, что триггер будет работать только для сессий, подключающихся к схеме cube.
Вместо ADDITIONAL_CONDITIONS можно добавить дополнительные условия, например, для фильтрации сессии по osuer'у, терминалу, имени программного модуля, etc.
'ALTER SESSION SET TRACEFILE_IDENTIFIER=my_trig_trace'; нужно для того, чтобы было удобно найти trace-файлы, в их имени будет содержаться строка "MY_TRIG_TRACE"

Когда трассировки получены, триггер больше не нужен:

-- Деактивируем триггер, вдруг понадобится...
ALTER TRIGGER sys.logon_trace_trigger DISABLE;
-- Не понадобился
DROP TRIGGER sys.logon_trace_trigger;

  2 комментария to “Триггер на событие logon”

  1. А что делать, если нужно узнать, из каких таблиц тянет данные веб-приложение?

    • Здравствуйте! Web-приложение - это такое же приложение, как и любое другое. Нужно взять трассировку сессии и посмотреть там.

      Более подробный совет смогу дать, если Вы поподробнее опишете свою ситуацию.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)