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


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

Область применения: SQL Server

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

Внимание

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

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

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

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

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

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

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

    Примечание.

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

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

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

    Примечание.

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

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

CREATE QUEUE NotifyQueue ;  
GO  
CREATE SERVICE NotifyService  
ON QUEUE NotifyQueue  
(  
[http://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. Это уведомление отправляет предварительно созданной службе CREATE_DATABASE сообщения обо всех событиях NotifyService, происходящих на сервере.

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)