Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Коллеги!

Alerts + RAISERROR - прекрасно высылает нотификацию на мыло

Alerts + THROW- почему не делает того же?
В чем нюансы?
19 ноя 15, 10:52    [18439529]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а вы патом ловите то ,что прокидоваете throw ? Сам то он ошибки не генерит
19 ноя 15, 10:53    [18439538]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Maxx
а вы патом ловите то ,что прокидоваете throw ? Сам то он ошибки не генерит

вот что сделано и работает с RAISERROR

declare @msg_id int = 52822, @ErrMsg varchar(max) = 'Error'

EXEC sp_addmessage @msgnum = @msg_id, @severity = 10, @msgtext = @ErrMsg;

EXEC sp_altermessage @msg_id, 'WITH_LOG', 'true';

-- Alert создан и настроен на ошибку 52822 и отсыл нотификации по мылу

RAISERROR(@msg_id, 10, 1) WITH LOG; -- мыло приходит

-- Если сделать THROW 
THROW 52822, 'Error by THROW', 1; -- ошибка есть, мыла нет

-- даже если сделать @severity = 19 - ошибка есть, а мыла нет
-- EXEC sp_addmessage @msgnum = @msg_id, @severity = 19, @msgtext = @ErrMsg;
19 ноя 15, 11:01    [18439595]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
RegisteredUser
даже если сделать @severity = 19 - ошибка есть, а мыла нет

ни THROW ни RAISERROR ни имеют никакого отношения к отправке почты.
Где и как вы настроили обработку серверных ошибок ?
19 ноя 15, 11:10    [18439654]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37224
THROW хоть и кидает ошибку, но не пишет в лог сервера. А алерты работают по ошибкам, попавшим в лог, а не по всем.
19 ноя 15, 11:22    [18439726]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Glory,

Автор имеет ввиду, что существует алерт, навешенный на его пользовательское сообщение об ошибке.

RAISERROR вызывает срабатывание алерта, а THROW нет.
19 ноя 15, 11:22    [18439727]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jovanny
Автор имеет ввиду, что существует алерт, навешенный на его пользовательское сообщение об ошибке.

Это вы сами видели или вы так думаете ?

Jovanny
RAISERROR вызывает срабатывание алерта, а THROW нет.

ни THROW ни RAISERROR не могут запустить алерт сами

"SQL Server Agent only responds to events for which an alert is defined. The method that SQL Server Agent uses to monitor events depends on the type of event.

When a SQL Server Agent alert is defined for a performance counter, SQL Server Agent directly monitors the performance counter. For a WMI event, SQL Server Agent registers an event query for the WMI event.

To respond to messages from SQL Server, SQL Server Agent monitors the Windows application log. SQL Server Agent can only respond to messages that appear in this log. By default, SQL Server logs the following messages in the Windows application log:

- Severity 19 or higher sysmessages errors.
- If you also want to log specific sysmessages errors that have a severity lower than 19, use the sp_altermessage stored procedure to designate such errors as "always logged".
- Any RAISERROR statement invoked by using the WITH LOG syntax.

Using RAISERROR WITH LOG is the recommended way to write to the Windows application log from an instance of SQL Server. For more information about the RAISERROR statement, see Using RAISERROR.


Any application event that is logged by using xp_logevent.

Note:
Logging application events consumes log space and can cause the Windows application log to exceed its maximum size. Make sure that the maximum Windows application log size is large enough to avoid loss of SQL Server event information.



When SQL Server logs a message, the SQL Server Agent service compares the message against the alerts defined by the SQL Server administrator.

Regardless of the source of the event, the SQL Server Agent service responds to the event by performing the tasks specified in the alert for the event.
"
19 ноя 15, 11:28    [18439760]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
позволю себк вставить скриншот

П.С.
Operator настроен правильно, мыло уходят если вызывать RAISERROR
если вызывать THROW - нет мыла

К сообщению приложен файл. Размер - 66Kb
19 ноя 15, 11:35    [18439808]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Гавриленко Сергей Алексеевич
THROW хоть и кидает ошибку, но не пишет в лог сервера. А алерты работают по ошибкам, попавшим в лог, а не по всем.

т.е. НЕТ возможности получать нотификацию посредством Alerts + THROW?
19 ноя 15, 11:37    [18439819]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Glory
Где и как вы настроили обработку серверных ошибок ?


Можно перефразировать Ваш вопрос?

Где НЕОБХОДИМО настроить обработку серверных ошибок,
чтобы и THROW и RAISERROR отсылали нотификацию на мыло?
19 ноя 15, 11:48    [18439918]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
RegisteredUser
чтобы и THROW и RAISERROR отсылали нотификацию на мыло?

Еще раз - ни THROW ни RAISERROR ни имеют никакого отношения к отправке почты.
Вы можете
- добиться, чтобы информация об ошибке писалась в Windows application log. Тогда ваши алерты смогут о ней узнать
- начать использовать Event Notifications/XEvent
19 ноя 15, 11:55    [18439974]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Glory
RegisteredUser
чтобы и THROW и RAISERROR отсылали нотификацию на мыло?

Еще раз - ни THROW ни RAISERROR ни имеют никакого отношения к отправке почты.
Вы можете
- добиться, чтобы информация об ошибке писалась в Windows application log. Тогда ваши алерты смогут о ней узнать
- начать использовать Event Notifications/XEvent


ok! спасибо порюсь в данном направлении

чтобы не множить темы, подскажите плиз еще логику работы чекбокса
Raise alert when message contains: <Message text>
У меня пока не никак не получилось вызвать Alert при любом тексте ошибки
(П.С. уже гуглил - не нашел)

-- например я деалю так:
RAISERROR('Shit happens!', 10, 1) WITH LOG; 
-- хотелось бы чтобы Alert реагировал на слово "Shit"


К сообщению приложен файл. Размер - 20Kb
19 ноя 15, 12:03    [18440051]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
RegisteredUser
У меня пока не никак не получилось вызвать Alert при любом тексте ошибки
(П.С. уже гуглил - не нашел)

Вы выше приведенную цитату из хелпа видели ? Прочитали ее ? Ваша ошибка попала в Windows application log ?

Сообщение было отредактировано: 19 ноя 15, 12:05
19 ноя 15, 12:05    [18440065]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Glory
RegisteredUser
У меня пока не никак не получилось вызвать Alert при любом тексте ошибки
(П.С. уже гуглил - не нашел)

Вы выше приведенную цитату из хелпа видели ? Прочитали ее ? Ваша ошибка попала в Windows application log ?


К сообщению приложен файл. Размер - 44Kb
19 ноя 15, 12:14    [18440121]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
RegisteredUser
Glory
пропущено...

Вы выше приведенную цитату из хелпа видели ? Прочитали ее ? Ваша ошибка попала в Windows application log ?


Картинка с другого сайта.

Агент запущен ? Счетчик алерта увеличился ?
19 ноя 15, 12:17    [18440139]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
ВСЕМ СПАСИБО!

я добился от Alert того, что хотел:
- теперь даже sp_addmessage не нужен
- в Windows application log нет лишних страшных "Error"
- мыльце приходит с нужным текстом

declare 
	  @addTxt varchar(100) = 'bla-bla'
	, @addInt int = '111'

RAISERROR('Shit happens! %s', 10, 1 , @addTxt) WITH LOG; 
RAISERROR('Shit happens! %d', 10, 1 , @addInt) WITH LOG; 


как настроить Alert, чтобы было хорошо, показано на скрине ниже

К сообщению приложен файл. Размер - 58Kb
19 ноя 15, 12:41    [18440295]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
RegisteredUser
я добился от Alert того, что хотел:

У вас номера ошибок в алерте и при выполнени разные
19 ноя 15, 12:50    [18440374]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Glory
RegisteredUser
я добился от Alert того, что хотел:

У вас номера ошибок в алерте и при выполнени разные


в принципе номер ошибки мне не нужен для моих скриптов.
меня устраивает, что я могу использовать один Alert для нотификации
и кормить ему разные error messages

мне важно чтобы нотификация приходила на мыло и было понятно по текту ошибки,
где стало нехорошо (главное теперь не забывать пароль "Shit" в миссагах)

BEGIN TRY
	SELECT 1/0;
END TRY

BEGIN CATCH

	declare @ErrMsg varchar(max) = ''
	Set @ErrMsg = CHAR(10) + 'ErrNr: #' + cast(ERROR_NUMBER() as varchar(100)) + '; Msg: ' + ERROR_MESSAGE()

	RAISERROR('Shit happens! -->> %s', 10, 1 , @ErrMsg) WITH LOG; 

END CATCH
19 ноя 15, 13:08    [18440508]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
Glory
Member

Откуда:
Сообщений: 104751
RegisteredUser
где стало нехорошо (главное теперь не забывать пароль "Shit" в миссагах)

Что будет с системными сообщениями ? Кто в них поместит "Shit" ? Или системные сообщения неинтересны ?
19 ноя 15, 13:15    [18440556]     Ответить | Цитировать Сообщить модератору
 Re: Alerts, RAISERROR, THROW?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Glory
RegisteredUser
где стало нехорошо (главное теперь не забывать пароль "Shit" в миссагах)

Что будет с системными сообщениями ? Кто в них поместит "Shit" ? Или системные сообщения неинтересны ?


в том-то и прикол!

мне не нужны на мыле ВСЕ нотификации.
мне нужны только МОИ.
19 ноя 15, 13:19    [18440584]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить