Поделиться через


Реализация уведомлений о событиях

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

Важное примечаниеВажно!

Для уведомлений о событиях, отправляющих сообщения компоненту Компонент Service Broker на удаленном сервере, необходимо настроить безопасность диалога ядра СУБД. Безопасность диалога должна быть настроена вручную согласно модели полной безопасности.

Создание целевой службы

Не нужно создавать службу, инициирующую компонент Компонент Service Broker, так как он включает в себя следующий специальный тип сообщения и контракт для уведомлений о событиях:

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification

Целевая служба, принимающая уведомления о событии, должна поддерживать такой уже существующий контракт.

Создание целевой службы

  1. Создайте очередь для получения сообщений.

    ПримечаниеПримечание

    Очередь получает сообщения следующего типа: https://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Создайте службу для очереди, ссылающуюся на контракт уведомлений о событии.

  3. Создайте маршрут для службы, чтобы определить адрес, на который компонент Компонент Service Broker будет отправлять сообщения этой службе. Если уведомление о событии отправляется службе в той же базе данных, укажите ADDRESS = 'LOCAL'.

    ПримечаниеПримечание

    Маршрут компонента Компонент Service Brokerопределяет службу, получающую уведомления. Если уведомление о событии направляется службе на удаленном сервере, маршруты необходимо определить и на исходном, и на целевом сервере, чтобы обеспечить двухстороннюю связь.

В следующем примере создается очередь, служба для этой очереди и маршрут к службе, обрабатывающей сообщения от контракта уведомления о событиях:

CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
);
GO
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO

Создание уведомления о событии

Уведомления о событиях создаются при помощи инструкции языка Transact-SQL CREATE EVENT NOTIFICATION и удаляются при помощи инструкции DROP EVENT NOTIFICATION. Чтобы изменить уведомление о событии, его нужно удалить, а затем создать заново.

В следующем примере создается уведомление о событии CreateDatabaseNotification. Это уведомление отправляет предварительно созданной службе NotifyService сообщения обо всех событиях CREATE_DATABASE, происходящих на сервере.

CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
ПредупреждениеВнимание!

Уведомления о событиях считают события CREATE_SCHEMA и определения <schema_element> в инструкциях CREATE SCHEMA различными событиями. Например, пусть создано уведомление о событиях CREATE_SCHEMA и CREATE_TABLE и выполняется следующий пакет.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

В этом случае уведомление о событиях направляется дважды: в первый раз при возникновении события CREATE_SCHEMA, а во второй — при возникновении события CREATE_TABLE. Рекомендуется либо избегать создания уведомлений о событиях одновременно для событий CREATE_SCHEMA и текстов <schema_element> в любых соответствующих определениях CREATE SCHEMA, либо встраивать в приложение логику, позволяющую избежать регистрации ненужных данных о событиях.

Создание уведомления о событии

Удаление уведомления о событии

См. также

Справочник

EVENTDATA (Transact-SQL)

Основные понятия

Получение сведений об уведомлениях о событиях