Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 create trigger after logon: включение трассировки для конкретного пользователя  [new]
наш человек в гаване
Member

Откуда:
Сообщений: 160
Здравствуйте!

Задача: написать триггер, который бы срабатывал только для одного конкретного пользователя (в данном случае
для пользователя DIANA) и включал трассировку.

Код ниже не работает. Подозреваю что ошибка в синтаксисе.
Поправьте меня пожалуйста.

CREATE OR REPLACE TRIGGER logon_user
AFTER logon ON database
BEGIN
IF (USER = 'DIANA') THEN
EXECUTE IMMEDIATE 'alter session set tracefile_identifier = "DIANA_TEST" ';
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS 10046 trace name
context forever, level 12';
END IF;
END;
25 май 12, 15:10    [12615872]     Ответить | Цитировать Сообщить модератору
 Re: create trigger after logon: включение трассировки для конкретного пользователя  [new]
AmKad
Member

Откуда:
Сообщений: 5222
наш человек в гаване,

Ошибка как минимум во втором динамическом SQL - нет апострофов.

P.S. Трассировку можно включить без динамического SQL.
25 май 12, 15:16    [12615934]     Ответить | Цитировать Сообщить модератору
 Re: create trigger after logon: включение трассировки для конкретного пользователя  [new]
наш человек в гаване
Member

Откуда:
Сообщений: 160
AmKad
наш человек в гаване,

Ошибка как минимум во втором динамическом SQL - нет апострофов.

P.S. Трассировку можно включить без динамического SQL.

Пользователи работают с БД через сервер приложений (Ubuntu - Apache - Perl), используя в качестве приложения веб-браузер.
В последнее время возросли жалобы на медленную работу через веб-браузер.
Я пока ещё не понял, где проблема - на самом сервере приложений или на сервере БД (Windows 2008 - Oracle 11.2.0.1).
Насколько я "понимаю", для включения трассировки при использовании веб-браузера
эффективней было бы написать триггер, который бы срабатывал на логон.
Поэтому идея создать тестового пользователя и написать триггер, который бы срабатывал
для этого тестового пользователя и запускал трассировку. Тогда возможно что-то удастся
понять.

CREATE OR REPLACE TRIGGER trace_trig_diana7
AFTER LOGON
ON DATABASE
DECLARE
 filestr VARCHAR2(200) :='ALTER SESSION SET tracefile_identifier = ''dianatest''   ';
 sqlstr VARCHAR2(200) := 'ALTER SESSION SET EVENTS ''10046 TRACE NAME CONTEXT FOREVER, LEVEL 12''';
BEGIN
  IF (USER = 'DIANA') THEN
    execute immediate filestr;
    execute immediate sqlstr;
  END IF;
END trace_trig_diana7;
/


теперь я апострофом разобрался.

как узнать, где же всё же проблема - на сервере приложений или на сервере БД?
25 май 12, 21:42    [12618363]     Ответить | Цитировать Сообщить модератору
 Re: create trigger after logon: включение трассировки для конкретного пользователя  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
наш человек в гаване
как узнать, где же всё же проблема - на сервере приложений или на сервере БД?


Добавить в приложение слой, отвечающий за отладочный вывод. Узнать у пользователей конкретные ситуации, в которых приложение работает неудовлетворительно. Анализировать вывод приложения и трассу Oracle.

PS: Копать, копать, копать. :)
25 май 12, 22:33    [12618472]     Ответить | Цитировать Сообщить модератору
 Re: create trigger after logon: включение трассировки для конкретного пользователя  [new]
наш человек в гаване
Member

Откуда:
Сообщений: 160
у меня есть трудности с анализом трассы.

кстати, проверил я свой триггер, он запустил трассировку для пользователя DIANA после входа.
Но вот в файле трассировки ошибки.

какие привилегии нужно дать (я так понимаю нужна привилегия для запуска трассировки)?


*** 2012-05-26 15:52:44.065
*** SESSION ID:(68.13) 2012-05-26 15:52:44.065
*** CLIENT ID:() 2012-05-26 15:52:44.065
*** SERVICE NAME:(db2) 2012-05-26 15:52:44.065
*** MODULE NAME:(Toad.exe) 2012-05-26 15:52:44.065
*** ACTION NAME:() 2012-05-26 15:52:44.065
 
Skipped error 604 during the execution of DIANA.TRACE_DIANA_LOGON 

*** 2012-05-26 15:52:44.065
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=0, mask=0x0)
----- Error Stack Dump -----
ORA-00604: ошибка на рекурсивном SQL-уровне 1
ORA-01031: привилегий недостаточно
ORA-06512: на  line 7
26 май 12, 16:00    [12619518]     Ответить | Цитировать Сообщить модератору
 Re: create trigger after logon: включение трассировки для конкретного пользователя  [new]
наш человек в гаване
Member

Откуда:
Сообщений: 160
я скомпилировал триггер не в схеме sys, отсюда у меня были ошибки.
исправил. всё ок. теперь есть очень много вопросов по файлу трассировки.
спрошу лучше в отдельной теме.
26 май 12, 18:32    [12619779]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить