Diseñar notificaciones de eventos

Para diseñar una notificación de eventos es preciso determinar los siguientes aspectos:

  • El ámbito de la notificación.

  • La instrucción o grupo de instrucciones Transact-SQL que generan la notificación de eventos.

Nota

Las notificaciones de eventos no se producen como respuesta a eventos que afectan a las tablas temporales locales o globales ni a los procedimientos almacenados.

Definir el ámbito de la notificación

Puede especificar una notificación de eventos para que se produzca como respuesta a una instrucción aplicada a todos los objetos de la base de datos actual o a todos los objetos de una instancia de SQL Server. El ámbito de las notificaciones de eventos especificadas en los eventos QUEUE_ACTIVATION y BROKER_QUEUE_DISABLED está limitado a colas individuales. No todos los eventos pueden producirse en todos los ámbitos. Por ejemplo, los eventos CREATE_DATABASE sólo se pueden producir en las instancias de servidor. Por el contrario, las notificaciones de eventos creadas en un evento ALTER_TABLE pueden programarse para que se produzcan en todas las tablas de una base de datos o en todas las tablas de una instancia de servidor.

En el siguiente ejemplo se envía una notificación de una instrucción ALTER TABLE ejecutada en una instancia de servidor a la instancia de Service Broker de la base de datos actual.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR ALTER_TABLE 
   TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';

Los vínculos a las instrucciones de Transact-SQL y los ámbitos que pueden especificarse para ellas se detallan en la sección "Seleccionar una instrucción DDL específica para ejecutar una notificación de eventos" que encontrará a continuación.

Especificar una instrucción o grupo de instrucciones Transact-SQL

Las notificaciones de eventos se pueden producir como respuesta a lo siguiente:

  • Una instrucción DDL específica, un evento de Traza de SQL o un evento de Service Broker

  • Un grupo predefinido de instrucciones de DDL o eventos de Traza de SQL

Seleccionar una instrucción DDL específica para generar una notificación de eventos

Las notificaciones de eventos pueden diseñarse para que se activen tras ejecutarse un procedimiento almacenado o una instrucción Transact-SQL determinados. Como se muestra en el ejemplo anterior, esa notificación de eventos se produce después de un evento ALTER_TABLE.

Para obtener una lista de las instrucciones Transact-SQL individuales que pueden utilizarse para generar una notificación de eventos,a sí como el ámbito en que pueden ejecutarse estas notificaciones, vea Eventos DDL. Estos eventos también se pueden obtener mediante la consulta de la vista de catálogo sys.event_notification_event_types.

Nota

Determinados procedimientos almacenados del sistema que realizan operaciones similares a DDL también pueden activar notificaciones de eventos. Pruebe las notificaciones de eventos para determinar su respuesta a los procedimientos almacenados del sistema que se ejecutan. Por ejemplo, la instrucción CREATE TYPE y el procedimiento almacenado sp_addtype activarán una notificación de evento que se crea en un evento CREATE_TYPE.

Seleccionar un evento de Traza de SQL específico para generar una notificación de eventos

Las notificaciones de eventos pueden diseñarse para que se activen tras producirse un evento de traza de SQL. Por ejemplo, la siguiente notificación de eventos se activa después de producirse un evento Object_Created en el servidor.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR Object_Created 
   TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;

Para obtener una lista de los eventos de traza de SQL que pueden generar una notificación de eventos, vea Usar eventos de traza con notificaciones de eventos. También puede obtener una lista de estos eventos mediante la consulta de la vista de catálogo sys.event_notification_event_types. Los eventos de Traza de SQL sólo se pueden ejecutar en el ámbito de las instancias de servidor. Para obtener información acerca de las clases de eventos de Traza de SQL, vea Referencia del Analizador de SQL Server.

Seleccionar un evento de Service Broker para generar una notificación de eventos

Se pueden diseñar las notificaciones de eventos para que se activen después de un evento QUEUE_ACTIVATION o BROKER_QUEUE_DISABLED de Service Broker. El evento QUEUE_ACTIVATION se produce cuando una cola tiene mensajes para procesar. Para obtener más información, vea Activación basada en eventos. El evento BROKER_QUEUE_DISABLED se produce cuando el estado de una cola está establecido en OFF. Para obtener más información, vea Controlar mensajes dudosos.

Seleccionar un grupo predefinido de instrucciones DDL para generar una notificación de eventos

Una notificación de eventos puede producirse después de cualquier evento de Transact-SQL que pertenezca a un grupo predefinido de eventos similares. Por ejemplo, si desea que una notificación de eventos se produzca después de haberse ejecutado una instrucción CREATE TABLE, ALTER TABLE o DROP TABLE, especifique FOR DDL_TABLE_EVENTS en la instrucción CREATE EVENT NOTIFICATON. Tras la ejecución de CREATE EVENT NOTIFICATION, el grupo de eventos se agrega a la vista de catálogo sys.events.

Nota

En SQL Server 2005, sys.events expande los grupos de eventos enumerando únicamente los eventos individuales cubiertos por un grupo. Por consiguiente, los cambios en los eventos cubiertos por los grupos de eventos en SQL Server 2008 no se aplican a las notificaciones de eventos creadas en esos grupos de eventos en SQL Server 2005.

En el tema Grupos de eventos DDL encontrará una lista de los grupos predefinidos de instrucciones DDL y DML disponibles para las notificaciones de eventos, las instrucciones que cubren y el ámbito en que estos grupos de eventos pueden ejecutarse.

Seleccionar un grupo predefinido de eventos de Traza de SQL para generar una notificación de eventos

Una notificación de eventos puede producirse después de cualquier evento de Traza de SQL que pertenezca a un grupo predefinido de eventos de traza similares. Por ejemplo, si desea que una notificación de eventos se produzca después de un evento de traza relacionado con el bloqueo, que incluya los eventos LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION y DEADLOCK_GRAPH, especifique FOR TRC_LOCKS en la instrucción CREATE EVENT NOTIFICATION.

En el tema Grupos de eventos de traza para el uso con notificaciones de eventos encontrará una lista de los grupos predefinidos de eventos de Traza de SQL disponibles para las notificaciones de eventos. Estos grupos sólo se pueden ejecutar en las instancias de servidor.