设计事件通知
更新日期: 2006 年 4 月 14 日
若要设计事件通知,必须确定下列内容:
- 通知的作用域。
- 引发事件通知的 Transact-SQL 语句或语句组。
定义通知作用域
您可以将事件通知指定为响应针对当前数据库中或 SQL Server 实例中的所有对象执行的语句。针对 QUEUE_ACTIVATION 和 BROKER_QUEUE_DISABLED 事件指定的事件通知的作用域限定为单个队列。并非所有事件都可以在任何作用域级别执行。例如,CREATE_DATABASE 事件仅可在服务器实例级执行。相反,针对 ALTER_TABLE 事件创建的事件通知可以通过编程,针对数据库中或服务器实例中的所有表执行。
下面的示例将服务器实例中运行的任意 ALTER TABLE
语句的通知发送到 Service Broker 实例的当前数据库中。
CREATE EVENT NOTIFICATION log_ddl1
ON SERVER
FOR ALTER_TABLE
TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';
下面的“选择特定的 DDL 语句引发事件通知”部分中提供了指向 Transact-SQL 语句以及可以为这些语句指定的作用域的链接。
事件通知不会响应可影响局部或全局临时表以及存储过程的事件。
指定 Transact-SQL 语句或语句组
可以创建事件通知以响应下面的内容:
- 特定 DDL 语句、SQL 跟踪事件或 Service Broker 事件
- 预定义的 DDL 语句组或 SQL 跟踪事件组
选择特定的 DDL 语句引发事件通知
事件通知可以设计为在运行特定的 Transact-SQL 语句或存储过程之后执行。如上面的示例中所示,事件通知在 ALTER_TABLE
事件之后执行。
可以与事件通知一起使用的 DDL 语句中提供了可以指定为引发事件通知的各个 Transact-SQL 语句以及可以执行通知的作用域的列表。还可以通过查询 sys.event_notification_event_types 目录视图获取这些事件。
注意: |
---|
执行 DDL 式操作的系统存储过程也可以激发事件通知。测试您的事件通知以确定它们是否响应运行的系统存储过程。例如,CREATE TYPE 语句和 sp_addtype 存储过程都将激发针对 CREATE_TYPE 事件创建的事件通知。但是,sp_rename 存储过程不会激发任何事件通知。 |
选择特定的 SQL 跟踪事件引发事件通知
事件通知可以设计为在 SQL 跟踪事件发生之后激发。例如,下面的事件通知在服务器中出现 Object_Created
事件之后才激发。
CREATE EVENT NOTIFICATION log_ddl1
ON SERVER
FOR Object_Created
TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;
有关可以引发事件通知的 SQL 跟踪事件的列表,请参阅与事件通知一起使用的跟踪事件。还可以通过查询 sys.event_notification_event_types 目录视图获取这些事件的列表。SQL 跟踪事件仅可在服务器实例作用域级执行。有关 SQL 跟踪事件类的详细信息,请参阅 SQL Server Profiler 参考。
选择特定的 Service Broker 事件引发事件通知
事件通知可以设计为在 QUEUE_ACTIVATION 或 BROKER_QUEUE_DISABLED Service Broker 事件之后激发。当队列有消息要处理时,将发生 QUEUE_ACTIVATION 事件。有关详细信息,请参阅Event-Based Activation。当队列状态设置为 OFF 时,将发生 BROKER_QUEUE_DISABLED 事件。有关详细信息,请参阅Handling Poison Messages。
选择预定义的 DDL 语句组引发事件通知
事件通知可以在任何属于预定义相似事件组的 Transact-SQL 事件运行之后执行。例如,如果要使事件通知在 CREATE TABLE、ALTER TABLE 或 DROP TABLE 语句执行之后执行,则可以在 CREATE EVENT NOTIFICATION 语句中指定 FOR DDL_TABLE_EVENTS。CREATE EVENT NOTIFICATION 执行之后,事件组包含的事件将添加到 sys.events 目录视图中。
有关可用于事件通知的预定义 DDL 和 DML 语句组、它们所包含的特定语句以及可执行这些事件组的作用域的列表,请参阅用于事件通知的 DDL 事件组。
选择预定义的 SQL 跟踪事件组引发事件通知
事件通知可以在任何属于预定义相似跟踪事件组的 SQL 跟踪事件运行之后执行。例如,如果要使事件通知在任何与锁定相关的跟踪事件(包括 LOCK_DEADLOCK、LOCK_DEADLOCK_CHAIN、LOCK_ESCALATION 和 DEADLOCK_GRAPH 事件)之后执行,则可以在 CREATE EVENT NOTIFICATION 语句中指定 FOR TRC_LOCKS。
有关可用于事件通知的预定义 SQL 跟踪事件组的列表,请参阅事件通知使用的跟踪事件组。这些组只能在服务器实例级执行。
请参阅
概念
其他资源
帮助和信息
更改历史记录
版本 | 历史记录 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|