Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Уведомления о событиях с помощью Service Broker  [new]
emperor_bms
Member

Откуда:
Сообщений: 122
Досталась мне "в наследство" БД (назовем ее исходной БД) в которой реализован процесс уведомлений о событиях на SQL сервере с помощью Service Broker. Ну то есть в активируемой SP которая указана для queue есть код отправки e-mail. Но что до отправки, так это не так важно. Важно то, что в другой БД я такой же механизм никак не могу заставить работать, несмотря на то, что все вроде делаю по фэншую:

Создаю queue
CREATE QUEUE [dbo].[NotifyQueue]
WITH STATUS = ON ,
RETENTION = OFF 

Создаю Service:
CREATE SERVICE [NotifyService]  
ON QUEUE [dbo].[NotifyQueue] ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO

Создаю route:
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = '[NotifyService]',
ADDRESS = 'LOCAL';
GO

Создаю Event Notification:
CREATE EVENT NOTIFICATION Create_login_Notification
ON SERVER FOR CREATE_LOGIN
TO SERVICE [NotifyService], 'current database' ;
GO

В принципе я создаю тоже самое, что и в БД где все работает, и все, что видно через SSMS. Думал этого достаточно, чтобы сообщения о событии CREATE_LOGIN появлялись здесь:
select * from NotifyQueue

дальнейшая их обработка это уже другая задача.
Однако этого не происходит, ничего не появляется. Дальнейшее мое копание в исходной БД выявило наличие там CONVERSATION
Покурил БуксОнлайн, попытался так:
BEGIN DIALOG CONVERSATION @InitDlgHandle
     FROM SERVICE
      [NotifyService]
     TO SERVICE
      N'NotifyService'

Conversation появился, но событий в queue так и не появляется. Вижу что в исходной БД состояние диалогов CONVERSING, а в моей БД - STARTED_OUTBOUND. Короче мучался по всякому, не выходит каменный цветок! :( В исходной БД события отлавливаюся как ни в чем не бывало, а в моей нет...
Есть тут знатоки Service Broker'a? Подскажите куда копать, второй день уже мучаюсь и все безрезультатно.
22 ноя 12, 17:33    [13514915]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
Started outbound:
Запущен на отправку. SQL Server обработал инструкцию BEGIN CONVERSATION для этого диалога, но не было отправлено ни одного сообщения.


emperor_bms
Короче мучался по всякому, не выходит каменный цветок!

Уважаемый Данила-мастер, запустите Profiler с включенными событиями ServiceBroker и SecurityAudit и посмотрите что показывает при проxождении.
22 ноя 12, 19:35    [13515679]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
emperor_bms
Member

Откуда:
Сообщений: 122
dalex1973
Уважаемый Данила-мастер, запустите Profiler с включенными событиями ServiceBroker и SecurityAudit и посмотрите что показывает при проxождении.


Совет хороший, но не пригодился, заработало и так. Создал заново пустую БД и в ней все работает. Видимо с той БД, в которой я мучался, что-то не так. Жаль не знаю что, а копаться дальше времени нет.

Теперь другая проблема: процедура, которая активируется очередью, пытается отправить почту, но не может запустить sp_send_dbmail. Говорит нет прав. Я так понимаю, что процедура запускается с правами пользователя той БД в которой находится. Как этому пользователю дать право на запуск процедур из msdb?
27 ноя 12, 16:37    [13537929]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
ALTER DATABASE [MyDB] SET TRUSTWORTHY ON


ALTER PROCEDURE [MySP]
      WITH EXECUTE AS OWNER


Или подписать процедуру сертификатом.
27 ноя 12, 17:28    [13538336]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
Glory
Member

Откуда:
Сообщений: 104751
emperor_bms
Как этому пользователю дать право на запуск процедур из msdb?

Читаем BOL

Execute permissions for sp_send_dbmail default to all members of the DatabaseMailUser database role in the msdb database. However, when the user sending the message does not have permission to use the profile for the request, sp_send_dbmail returns an error and does not send the message.
27 ноя 12, 17:34    [13538402]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
emperor_bms
Member

Откуда:
Сообщений: 122
Glory
emperor_bms
Как этому пользователю дать право на запуск процедур из msdb?

Читаем BOL

Execute permissions for sp_send_dbmail default to all members of the DatabaseMailUser database role in the msdb database. However, when the user sending the message does not have permission to use the profile for the request, sp_send_dbmail returns an error and does not send the message.

Дык а я про это и спрашиваю. Процедура-то запускается от имени пользователя БД отличной от msdb. Вопрос в том как назначить роль DatabaseMailUser в msdb пользователю из другой БД? Создание юзера для того же логина в msdb не помогает.

Пока помог ваш же совет из похожей ветки:
Glory
- EXECUTE AS OWNER
- владельцем процедуры сделать dbo
- на обеих базах включить DB_CHAINING и TRUSTWORTHY

Причем обе эти опции по умолчанию включены для msdb.
29 ноя 12, 11:45    [13548002]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
Glory
Member

Откуда:
Сообщений: 104751
emperor_bms
Создание юзера для того же логина в msdb не помогает.

Помогает. Если для правильного логина только создавать
BOL - Troubleshooting Database Mail: Permission denied on sp_send_dbmail
29 ноя 12, 11:46    [13548018]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
emperor_bms
Member

Откуда:
Сообщений: 122
Glory
emperor_bms
Создание юзера для того же логина в msdb не помогает.

Помогает. Если для правильного логина только создавать
BOL - Troubleshooting Database Mail: Permission denied on sp_send_dbmail

Пробовал, не работает. Может я не знаю, что значит "правильный логин"? Делал так: Создавал логин, например 'SendMail', маппил его к юзерам в msdb и в той БД, откуда запускается процедура отсылающая почту (как db_owner). Делал юзера 'SendMail' владельцем процедуры отсылающей почту. В msdb юзеру 'SendMail' давал роль 'DatabaseMailUserRole'. Для queue прописывал EXECUTE AS OWNER. Не отсылает. Что я сделал не так?
13 дек 12, 18:59    [13628225]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
SamSafonov
Guest
http://www.rsdn.ru/article/db/Yukon_Async.xml
http://www.writebetterbits.com/2008/01/overview-of-sql-server-2005-database_25.html
http://www.codeproject.com/Articles/11795/Introducing-Distributed-Messaging-using-Service-Br
27 фев 13, 23:22    [13991455]     Ответить | Цитировать Сообщить модератору
 Re: Уведомления о событиях с помощью Service Broker  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
http://blogs.msdn.com/b/alexejs/archive/2009/08/15/9871237.aspx?Redirected=true
28 фев 13, 02:22    [13991847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить