Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
Ситуация: в триггере возникает exception, связанный с неработоспособностью mail-сервера.
Я перехватываю ошибку и мне нужно передать как то сообщение DBA об этом и продолжить дальше нормальную работу триггера.
Как можно обратить внимание DBA без человеческого вмешательства?
4 июл 07, 13:25    [4349308]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Oerr
Member

Откуда: Сургут
Сообщений: 774
Можно установить GSM модем и отправить SMS...

Картинка с другого сайта.
http://surgutnet.ru
Люди часто совершают старые ошибки, но при этом ссылаются на новые обстоятельствами.
4 июл 07, 13:29    [4349358]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Takurava
Member

Откуда:
Сообщений: 1776
Почта рулит
4 июл 07, 13:30    [4349361]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
Takurava
Почта рулит

Почта как раз не рулит. Из-за нее и возникает exception.
4 июл 07, 13:32    [4349380]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Sk(A)
Member

Откуда:
Сообщений: 593
Takurava
Почта рулит

pan159
связанный с неработоспособностью mail-сервера

4 июл 07, 13:33    [4349386]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Exotic
Member

Откуда: Новороссийск
Сообщений: 322
Можно реализовать запуск внешних приложений и производить нотификацию любым приемлимым способом. В винде можно к примеру отправлять
net send admin_machine мыл-сервер ёк!
---------------------------------------------
OracleManiacs
4 июл 07, 13:35    [4349414]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
Exotic
Можно реализовать запуск внешних приложений и производить нотификацию любым приемлимым способом. В винде можно к примеру отправлять
net send admin_machine мыл-сервер ёк!
---------------------------------------------
OracleManiacs


Извините, забыл сказать: сервер под Linux
4 июл 07, 13:37    [4349429]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
Написать в alert.log, к примеру. Если права дадут :)
4 июл 07, 13:40    [4349456]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
Timm
Написать в alert.log, к примеру. Если права дадут :)


OK. Спасибо, попробую.
4 июл 07, 13:45    [4349484]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Takurava
Member

Откуда:
Сообщений: 1776
pan159
Takurava
Почта рулит

Почта как раз не рулит. Из-за нее и возникает exception.
Невнимательно прочёл... Может завести на этот случай ещё один маааленький почтовичок?
4 июл 07, 13:50    [4349523]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Я бы соорудил пайп/таблицу, в которую автономно валил бы сообщения для админа.
Ну и заставил, не админа, конечно некту это читать в темпе мыла/аси и по получении сигнала, естесстно, сгоняв, в темпе, за пивом - пробудить таки админа нежным поглаживанием..
4 июл 07, 13:55    [4349577]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
Timm
Написать в alert.log, к примеру. Если права дадут :)

В 10g похоже этой недокументированной процедуры нет или она называется по другому. При компиляции ругается.
4 июл 07, 13:57    [4349592]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Rihard
Member

Откуда: Киев
Сообщений: 366
pan159
Timm
Написать в alert.log, к примеру. Если права дадут :)

В 10g похоже этой недокументированной процедуры нет или она называется по другому. При компиляции ругается.


Все там есть. Вам же сказали:

автор
Если права дадут :)
4 июл 07, 14:08    [4349698]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
dmitrysk
Member

Откуда:
Сообщений: 460
Ну кинешь ты в alert.log сообщение и что? Админ-то не просматривает этот файла в онлайн постоянно, у многих настроены alert'ы через mail, в случае появления таких вот сюрпризов в этом файле.

Так, что считаю это не выход.

А mail сервером пусть занимаются сисадмины, а не DBA. Это немножко разные обязанности.
4 июл 07, 14:10    [4349713]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Exotic
Member

Откуда: Новороссийск
Сообщений: 322
Ну а как же необходимость сообщить о том, что случилась жопа с базой, если мыло упало?

---------------------------------------------
OracleManiacs
4 июл 07, 14:24    [4349842]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
dmitrysk
Member

Откуда:
Сообщений: 460
Если с базой случилась жопа и почта не работает, то на 100% уверен - сообщат, достанут, душу вытрясут... Есть пользователи которые работают, в случае проблемы они всегда начнуть звонить сначала на хелпдески, потом начальству DBA, а тот спустит все проблемы админу сразу же.
4 июл 07, 14:27    [4349866]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Takurava
Member

Откуда:
Сообщений: 1776
Exotic
Ну а как же необходимость сообщить о том, что случилась жопа с базой, если мыло упало?
Тогда надо настраивать SMS-ки. Можно ещё взять Alchemy и настроить Асечные сообщения.
4 июл 07, 14:30    [4349894]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
Exotic
Ну а как же необходимость сообщить о том, что случилась жопа с базой, если мыло упало?
Любым другим способом, вплоть до написания простой программы, которая висит в трее и слушает сокет.
Если другая программа законнектилась на этот порт по TCP и передела какой-нибудь текст, то этот текст надо отобразить.
4 июл 07, 14:36    [4349943]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Exotic
Member

Откуда: Новороссийск
Сообщений: 322
Bely
Exotic
Ну а как же необходимость сообщить о том, что случилась жопа с базой, если мыло упало?
Любым другим способом, вплоть до написания простой программы, которая висит в трее и слушает сокет.
Если другая программа законнектилась на этот порт по TCP и передела какой-нибудь текст, то этот текст надо отобразить.
Собственно это я и имел ввиду.
4 июл 07, 14:42    [4349997]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Marat73
Member

Откуда:
Сообщений: 53
pan159
Ситуация: в триггере возникает exception, связанный с неработоспособностью mail-сервера.
Я перехватываю ошибку и мне нужно передать как то сообщение DBA об этом и продолжить дальше нормальную работу триггера.
Как можно обратить внимание DBA без человеческого вмешательства?


Если хочешь из триггера делать нетранзакционные действия (отправка сообщений по мылу, SMS и т.д.) то нужно иметь ввиду:


BEFORE Triggers Fired Multiple Times

If an UPDATE or DELETE statement detects a conflict with a concurrent UPDATE, then Oracle Database performs a transparent ROLLBACK to SAVEPOINT and restarts the update. This can occur many times before the statement completes successfully. Each time the statement is restarted, the BEFORE statement trigger is fired again. The rollback to savepoint does not undo changes to any package variables referenced in the trigger. Your package should include a counter variable to detect this situation.


Дока здесь:
http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#sthref1169

Том Кайт поясняет это здесь:
http://tkyte.blogspot.com/2005/08/something-different-part-i-of-iii.html
http://tkyte.blogspot.com/2005/08/part-ii-seeing-restart.html
http://tkyte.blogspot.com/2005/09/part-iii-why-is-restart-important-to.html


Что примерно означает:

"BEFORE триггеры запускаются несколько раз
Если операции UPDATE или DELETE обнаруживают конфликт с конкурирующим UPDATE, то база данных Оракл выполняет прозрачный ROLLBACK TO SAVEPOINT и рестартует UPDATE. Это может происходить много раз до того как выражение выполнится успешно. Каждый раз, когда выражение рестартуется, BEFORE триггер запускается заново. Выполнение ROLLBACK TO SAVEPOINT не выполняет откат изменений никаких пакетных переменных, на которые ссылается триггер. Ваш пакет должен включать переменную-счетчик для обнаружения такой ситуации."


Делаем тест:

CREATE TABLE T_1(ID NUMBER)

/

CREATE OR REPLACE TRIGGER SCOTT.t

BEFORE UPDATE of id

ON SCOTT.T_1

FOR EACH ROW

BEGIN

dbms_output.put_line( 'old.id = ' || :old.id );

dbms_output.put_line( 'new.id = ' || :new.id );

END t;

/

insert into t_1 values(0);

commit;

******************************************************

Затем открываю две сессии (Т1 и Т2).

1. в Т1 выполняю update t_1 set id=16
2. в Т2 выполняю update t_1 set id=17
(при этом сессия блокируется в ожидании commit или rollback первой сессии)
3. в Т1 делаю COMMIT
4. смотрим результат в Т2:

old.id = 0
new.id = 17

old.id = 16

new.id = 17

Результат налицо :-) : триггер выполнился два раза.
4 июл 07, 15:25    [4350378]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
В итоге за основу взял решение, предложенное orawish.
Создал таблицу, куда записываю сообщение об ошибке. А юзерам сразу после коннекта (если конечно в таблице есть записи об ошибках) выдаю сообщение типа: "Иди возьми пустую бутылку и стукни по лысому пню, который называет себя сисадмином".
4 июл 07, 16:09    [4350751]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
g
Guest
pan159
В итоге за основу взял решение, предложенное orawish.
Создал таблицу, куда записываю сообщение об ошибке. А юзерам сразу после коннекта (если конечно в таблице есть записи об ошибках) выдаю сообщение типа: "Иди возьми пустую бутылку и стукни по лысому пню, который называет себя сисадмином".


Логичней было бы пользователю выдавать сообщение, что в связи с недоступностью того-то и того-то часть функциональности системы ограничена. А сами сообщения ставить в очередь исходящих сообщений, которые будут высланы как только SMTP сервер станет доступен...
Также в трей можно повесить а-ля m$ "Xочешь сделать программу лучше - иди возьми пустую бутылку и стукни по лысому пню, который называет себя сисадмином".
4 июл 07, 16:33    [4350955]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
miksoft
Member

Откуда:
Сообщений: 38553
pan159
Exotic
Можно реализовать запуск внешних приложений и производить нотификацию любым приемлимым способом. В винде можно к примеру отправлять
net send admin_machine мыл-сервер ёк!
Извините, забыл сказать: сервер под Linux
В самбе есть возможность послать такое сообщение.
4 июл 07, 16:37    [4350986]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
Надо просто показать эксепшн юзеру с просьбой обратиться к адмнистратору...
-------------------------------------------------------
Автор благодарит алфавит за любезно предоставленные ему буквы.
4 июл 07, 17:01    [4351213]     Ответить | Цитировать Сообщить модератору
 Re: Как передать сообщение сисадмину из триггера?  [new]
pan159
Member

Откуда: Москва
Сообщений: 814
Apex
Надо просто показать эксепшн юзеру с просьбой обратиться к адмнистратору...

Геморройно очень. Там несколько уровней вложенности. Метод известен, конечно, и даже описан в книге по PL/SQL (разбор стека ошибок). А без обработки пользователь видит совсем не то сообщение.
4 июл 07, 17:35    [4351515]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить