Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Triger в standby не пропускает юзера.  [new]
Aidyn
Member

Откуда:
Сообщений: 72
Добрый день всем! Ситуация такая есть боевая база Oracle 9i, и у нее есть тригеры которые ведут логи по пользователям. Есть еще standby, при коннекте на машину выдает ошибку.

ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
ORA-06512: at "SAFETY.TRG_INS_EVENTLOG", line 2
ORA-04088: error during execution of trigger 'SAFETY.TRG_INS_EVENTLOG'
ORA-06512: at "SAFETY.WRITE_LOG", line 14
ORA-06512: at "SYS.UNIBILL_LOGON_TRG_HELPER", line 12
ORA-06512: at line 2

Тепер вопрос. Как мне обойти эти тригеры.Или как мне изминит тригер, что бы она понимала то что база открыта в режиме чтения. Есть ли у кого то идеи?

Вот одна из тригер:

PROCEDURE        write_log (
   xuid$       NUMBER,
   xoid$       NUMBER,
   note$       VARCHAR2,
   loglevel$   NUMBER
)
AS
   PRAGMA AUTONOMOUS_TRANSACTION;
   se        safety.xsession%ROWTYPE;
   counter   NUMBER;
BEGIN
   IF loglevel$ = -1
   THEN                                      --yoi io?ii aey caiene i?ioieiea ii iaecaanoiui ?ca?ai
      INSERT INTO safety.xeventlog                         --eioi?ua ii?ao e ieeiaaa ia iiaee??aony
                  (xsession_id, xuid, xwpid, xwid, xoid, eventdate, note
                  )
           VALUES (-1, xuid$, -1, -1, xoid$, SYSDATE, note$
                  );
   ELSE
      BEGIN
         SELECT *
           INTO se
           FROM safety.xsession
          WHERE xuid = xuid$;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            RETURN;
      END;
   END IF;

   IF loglevel$ = 0
   THEN
      RETURN;
   END IF;

   IF loglevel$ = 1
   THEN
      INSERT INTO safety.xeventlog
                  (xsession_id, xuid, xwpid, xwid, xoid, eventdate, note
                  )
           VALUES (se.ID, xuid$, se.xwpid, se.xwid, xoid$, SYSDATE, note$
                  );
   END IF;

   IF loglevel$ = 2
   THEN
      SELECT COUNT (1)
        INTO counter
        FROM safety.xeventstat e
       WHERE e.xuid = xuid$
         AND e.xwpid = se.xwpid
         AND e.xoid = xoid$
         AND TRUNC (SYSDATE, 'HH') = e.hdate;

      IF counter = 0
      THEN
         INSERT INTO safety.xeventstat
                     (xuid, xwpid, xoid, hdate, xcount
                     )
              VALUES (xuid$, se.xwpid, xoid$, TRUNC (SYSDATE, 'HH'), 0
                     );
      ELSE
         UPDATE safety.xeventstat e
            SET xcount = xcount + 1
          WHERE e.xuid = xuid$
            AND e.xwpid = se.xwpid
            AND e.xoid = xoid$
            AND e.hdate = TRUNC (SYSDATE, 'HH');
      END IF;
   END IF;

   IF loglevel$ > 2
   THEN
      RETURN;
   END IF;

   COMMIT;                                                             -- END AUTONOMOUS TRANSACTION
END;
7 апр 08, 07:56    [5510197]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Исправить на боевой БД процедурку так, чтоб она отлавливала и обрабатывала ошибки
Докатить до стендбая
7 апр 08, 08:05    [5510207]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
Или можно попробовать дать dba пользователю?
7 апр 08, 10:28    [5510615]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Э-ээ... И чем это поможет?
7 апр 08, 10:39    [5510675]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
Вячеслав Любомудров
Э-ээ... И чем это поможет?

Да уж, спутал малость. Имелось ввиду, что на dba триггера logon не распостраняются. А тут ведется логирование.
7 апр 08, 10:43    [5510701]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Хм.. Действительно, если проблема только в тригере, может помочь
semenar
Имелось ввиду, что на dba триггера logon не распостраняются
Распространняются, просто ошибка игнорируется
7 апр 08, 10:46    [5510723]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
Вячеслав Любомудров
Хм.. Действительно, если проблема только в тригере, может помочь
semenar
Имелось ввиду, что на dba триггера logon не распостраняются
Распространняются, просто ошибка игнорируется

Ну опять не совсем точно выразился.
З.Ы. Если так делать, то dba давать ессно на primary надо.
7 апр 08, 10:54    [5510777]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Достаточно ADMINISTER DATABASE TRIGGER
7 апр 08, 11:08    [5510903]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
Aidyn
Member

Откуда:
Сообщений: 72
Может быт в тригере поставит условия примерно такого характера:
если база открыта в реадонли то нечего не делать, иначе пиши логи.
Возможно ли такое прокатит?
7 апр 08, 12:59    [5511784]     Ответить | Цитировать Сообщить модератору
 Re: Triger в standby не пропускает юзера.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
Aidyn
Может быт в тригере поставит условия примерно такого характера:
если база открыта в реадонли то нечего не делать, иначе пиши логи.
Возможно ли такое прокатит?

Возможно анализировать:
 select open_mode from v$database;
7 апр 08, 13:44    [5512099]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить