CREATE EVENT NOTIFICATION (Transact-SQL)

Actualizado: 15 de septiembre de 2007

Crea un objeto que envía información sobre un evento de servidor o base de datos para un servicio de Service Broker. Las notificaciones de eventos sólo se pueden crear mediante instrucciones de Transact-SQL.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

CREATE EVENT NOTIFICATION event_notification_name 
ON { SERVER | DATABASE | QUEUE queue_name } 
[ WITH FAN_IN ]
FOR { event_type | event_group } [ ,...n ]
TO SERVICE 'broker_service' , { 'broker_instance_specifier' | 'current database' }
[ ; ]

Argumentos

  • event_notification_name
    Es el nombre de la notificación de eventos. El nombre de una notificación de eventos debe cumplir las reglas para identificadores y debe ser único dentro del ámbito en el que se creó: SERVER, DATABASE o object_name.
  • SERVER
    Aplica el ámbito de la notificación de eventos a la instancia actual de SQL Server. Si se especifica, la notificación se activa cada vez que el evento especificado en la cláusula FOR se produce en cualquier lugar de la instancia de SQL Server.
  • DATABASE
    Aplica el ámbito de la notificación de eventos a la base de datos actual. Si se especifica, la notificación se activa cada vez que el evento especificado en la cláusula FOR se produce en la base de datos actual.
  • QUEUE
    Aplica el ámbito de la notificación a la cola especificada en la base de datos actual. Se puede especificar QUEUE sólo si también se especifica FOR QUEUE_ACTIVATION o FOR BROKER_QUEUE_DISABLED.
  • queue_name
    Es el nombre de la cola a la que se aplica la notificación de eventos. Sólo se puede especificar queue_name si se ha establecido QUEUE.
  • WITH FAN_IN
    Indica a SQL Server que sólo envíe un mensaje por evento a un servicio especificado para todas las notificaciones de eventos que:

    • Se crean en el mismo evento.
    • Son creadas por la misma entidad de seguridad (identificada por el mismo SID).
    • Especifica el mismo servicio y broker_instance_specifier.
    • Especifique WITH FAN_IN.

    Por ejemplo, se crean tres notificaciones de evento. Todas las notificaciones de evento especifican FOR ALTER_TABLE, WITH FAN_IN, la misma cláusula TO SERVICE y se crean con el mismo SID. Cuando se ejecuta una instrucción ALTER TABLE, los mensajes que crean estas tres notificaciones de evento se mezclan en uno solo. Por tanto, el servicio de destino recibe un solo mensaje del evento.

  • event_group
    Es el nombre de un grupo predefinido de tipos de evento de Transact-SQL o de Traza de SQL. Se puede activar una notificación de eventos tras la ejecución de cualquier evento que pertenece a un grupo de eventos. Para obtener una lista de grupos de eventos DDL, los eventos de Transact-SQL que cubren y el ámbito en el que se pueden definir, vea Grupos de eventos DDL para el uso con notificaciones de eventos. Para obtener una lista de grupos de eventos de traza y los eventos de traza que cubren, vea Grupos de eventos de traza para el uso con notificaciones de eventos.

    event_group también actúa como una macro, cuando finaliza la instrucción CREATE EVENT NOTIFICATION, al agregar los tipos de evento que cubre a la vista de catálogo sys.events.

  • 'broker_service'
    Especifica el servicio de destino que recibe los datos de instancia de evento. SQL Server abre una o más conversaciones al servicio de destino para la notificación de eventos. Este servicio debe respetar el mismo contrato y tipo de mensaje de eventos de SQL Server que se utilizan en el envío del mensaje. Para obtener más información, vea Creating Service Broker Services.

    Las conversaciones permanecen abiertas hasta que se quita la notificación de eventos. Algunos errores pueden hacer que las conversaciones se cierren antes. Es posible que la finalización de algunas o todas las conversaciones explícitamente evite que el servicio de destino reciba más mensajes.

  • { 'broker_instance_specifier' | 'current database' }
    Especifica una instancia de Service Broker en la que se resuelve broker_service. Se puede adquirir el valor de un Service Broker específico al realizar una consulta en la columna service_broker_guid de la vista de catálogo sys.databases. Utilice 'current database' para especificar la instancia de Service Broker en la base de datos actual. 'current database' es un literal de cadena que no distingue mayúsculas de minúsculas.

Notas

Service Broker incluye un tipo de mensaje y un contrato específicos para notificaciones de evento. Por lo tanto, no se debe crear un servicio de inicio de Service Broker debido a que ya existe uno que especifica el nombre de contrato siguiente: https://schemas.microsoft.com/SQL/Notifications/PostEventNotification.

El servicio de destino que recibe notificaciones de eventos debe respetar este contrato preexistente. Para obtener más información acerca de cómo crear servicios de destino de Service Broker, vea Introduction to Service Broker Programming.

ms189453.note(es-es,SQL.90).gifImportante:
Se debe configurar la seguridad del diálogo de Service Broker para las notificaciones de evento que envían mensajes a un Service Broker en un servidor remoto. La seguridad del diálogo debe configurarse manualmente según el modelo de seguridad completa. Para obtener más información, vea Seguridad de diálogo para notificaciones de eventos.

Si se revierte una transacción de evento que activa una notificación, también se revierte el envío de la notificación de eventos. Las notificaciones de eventos no son activadas por una acción definida en un desencadenador cuando se confirma o revierte la transacción en el desencadenador. Dado que los eventos de traza no están enlazados mediante transacciones, se envían las notificaciones de eventos basadas en los eventos de traza, independientemente de si se revierte la transacción que los activa.

Si se interrumpe la conversación entre el servidor y el servicio de destino tras la activación de una notificación de eventos, se informa un error y se quita la notificación de eventos.

Tanto si se envía la notificación de eventos como si no, la notificación de eventos que originalmente inició la notificación no se ve afectada.

Se guarda un registro de cualquier error en el envío de una notificación de eventos.

Permisos

Para crear una notificación de eventos en el ámbito de la base de datos (ON DATABASE), se requiere el permiso CREATE DATABASE DDL EVENT NOTIFICATION en la base de datos actual.

Para crear una notificación de eventos en una instrucción DDL incluida en el ámbito del servidor (ON SERVER), se requiere el permiso CREATE DDL EVENT NOTIFICATION en el servidor.

Para crear una notificación de eventos en un evento de traza, se requiere el permiso CREATE TRACE EVENT NOTIFICATION en el servidor.

Para crear una notificación de eventos en el ámbito de una cola, se requiere el permiso ALTER en la cola.

Ejemplos

[!NOTA] En los ejemplos A y B, el GUID proporcionado en la cláusula TO SERVICE'NotifyService' ('8140a771-3c4b-4479-8ac0-81008ab17984') es específico del equipo en el que se instaló el ejemplo. Para esta instancia del equipo, éste fue el GUID para la base de datos AdventureWorks. Para copiar y ejecutar estos ejemplos, necesita reemplazar dicho GUID con uno de su equipo e instancia de SQL Server. Como se explica en la definición de { 'broker_instance_specifier' | 'current database'} de la anterior sección de Argumentos, puede adquirir 'broker_instance_specifier' mediante una consulta a la columna service_broker_guid de la vista de catálogo sys.databases.

A. Crear una notificación de eventos en el ámbito de un servidor

En el ejemplo siguiente se crean los objetos necesarios para configurar un servicio de destino utilizando Service Broker. El servicio de destino hace referencia al contrato y tipo de mensaje del servicio de inicio específicamente para notificaciones de eventos. Después, se crea una notificación de eventos en el servicio de destino que envía una notificación cada vez que tiene lugar un evento de traza Object_Created en la instancia de SQL Server.

--Create a queue to receive messages.
CREATE QUEUE NotifyQueue ;
GO
--Create a service on the queue that references
--the event notifications contract.
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
([https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
--Create a route on the service to define the address 
--to which Service Broker sends messages for the service.
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO
--Create the event notification.
CREATE EVENT NOTIFICATION log_ddl1 
ON SERVER 
FOR Object_Created 
TO SERVICE 'NotifyService',
    '8140a771-3c4b-4479-8ac0-81008ab17984' ;

A. Crear una notificación de eventos en el ámbito de una base de datos

El ejemplo siguiente crea una notificación de eventos en el mismo servicio de destino que el ejemplo anterior. La notificación de eventos se activa después de un evento ALTER_TABLE en la base de datos de ejemplo AdventureWorks.

CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService',
    '8140a771-3c4b-4479-8ac0-81008ab17984';

C. Obtener información sobre una notificación de eventos en el ámbito de un servidor

El ejemplo siguiente realiza una consulta en la vista de catálogo sys.server_event_notifications respecto de metadatos sobre la notificación de eventos log_ddl1 creada en el ámbito de un servidor.

SELECT * FROM sys.server_event_notifications
WHERE name = 'log_ddl1'

C. Obtener información sobre una notificación de eventos en el ámbito de una base de datos

El ejemplo siguiente realiza una consulta en la vista de catálogo sys.event_notifications respecto de metadatos sobre la notificación de eventos Notify_ALTER_T1 creada en el ámbito de una base de datos.

SELECT * FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1'

Vea también

Referencia

DROP EVENT NOTIFICATION (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.event_notifications (Transact-SQL)
sys.server_event_notifications (Transact-SQL)
sys.events (Transact-SQL)
sys.server_events (Transact-SQL)

Otros recursos

Implementar notificaciones de eventos

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

5 de diciembre de 2005

Contenido nuevo:
  • Se ha agregado una aclaración a la descripción de la cláusula WITH FAN_IN.
  • Se ha agregado una Nota importante que remite a los usuarios a un tema independiente acerca de la configuración de la seguridad de diálogo de Service Broker para ver notificaciones de evento destinadas a servidores remotos.

15 de septiembre de 2007

Contenido nuevo:
  • Se agregó una nota sobre cómo reemplazar el GUID al ejecutar el código en los ejemplos.