实现事件通知

若要实现事件通知,必须先创建一个目标服务来接收事件通知,然后创建事件通知。

重要

应为将消息发送到远程服务器上的 Service Broker 的事件通知配置 Service Broker 对话框安全性。 必须根据完整的安全模型手动配置对话安全性。

创建目标服务

无需创建 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。 此通知将有关服务器上发生的任何CREATE_DATABASE事件的消息发送到之前创建的NotifyService服务。

CREATE EVENT NOTIFICATION CreateDatabaseNotification  
ON SERVER  
FOR CREATE_DATABASE  
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;  

谨慎

事件通知将CREATE_SCHEMA事件和 <CREATE SCHEMA 语句的schema_element> 定义识别为单独的事件。 例如,在CREATE_SCHEMA和CREATE_TABLE事件上创建事件通知,并运行以下批处理。

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

在这种情况下,会被引发两次事件通知:一次是在发生CREATE_SCHEMA事件时,另一次是在发生CREATE_TABLE事件时。 建议避免在CREATE_SCHEMA事件和 <任何相应 CREATE SCHEMA 定义的schema_element> 文本上创建事件通知,或将逻辑构建到应用程序中,以避免捕获不需要的事件数据。

创建事件通知

删除事件通知

另请参阅

获取有关事件通知的信息
EVENTDATA (Transact-SQL)