若要实现事件通知,必须先创建一个目标服务来接收事件通知,然后创建事件通知。
重要
应为将消息发送到远程服务器上的 Service Broker 的事件通知配置 Service Broker 对话框安全性。 必须根据完整的安全模型手动配置对话安全性。
创建目标服务
无需创建 Service Broker 发起的服务,因为 Service Broker 包括以下事件通知的特定消息类型和协定:
https://schemas.microsoft.com/SQL/Notifications/PostEventNotification
接收事件通知的目标服务必须遵循此预先存在的协定。
创建目标服务:
创建队列以接收消息。
注释
队列接收以下消息类型:
https://schemas.microsoft.com/SQL/Notifications/QueryNotification
。在引用事件通知协议的队列上创建服务。
在服务上创建路由,以定义 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> 文本上创建事件通知,或将逻辑构建到应用程序中,以避免捕获不需要的事件数据。
创建事件通知
删除事件通知