Diseñar notificaciones de eventos

Actualizado: 14 de abril de 2006

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.

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", más adelante.

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.

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.

Se puede especificar una lista de instrucciones Transact-SQL individuales para generar una notificación de eventos. El ámbito en que pueden ejecutarse estas notificaciones se proporciona en Eventos DDL para la utilización con notificaciones de eventos. 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. Sin embargo, el procedimiento almacenado sp_rename no activa ninguna notificación de evento.

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' ;

En Utilizar eventos de traza con notificaciones de evento encontrará una lista de los eventos de traza de SQL que pueden generar una notificación 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 Event-Based Activation. El evento BROKER_QUEUE_DISABLED se produce cuando el estado de una cola está establecido en OFF. Para obtener más información, vea Handling Poison Messages.

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, los eventos englobados en un grupo de eventos se agregan a la vista de catálogo sys.events.

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

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.

Vea también

Conceptos

Conceptos básicos de las notificaciones de eventos
Implementar notificaciones de eventos

Otros recursos

EVENTDATA (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido nuevo:
  • Se agregó una nota en la que se recomienda probar las notificaciones de eventos para determinar su respuesta a los procedimientos almacenados que se ejecutan.
  • Se agregaron referencias a la vista de catálogo sys.event_notification_event_types.

5 de diciembre de 2005

Contenido modificado:
  • Se agregó información a la sección "Seleccionar una instrucción DDL específica para generar una notificación de eventos" sobre las notificaciones de eventos que se pueden producir después de ejecutarse ciertos procedimientos almacenados.