Notificaciones de eventosEvent Notifications

SE APLICA A: síSQL Server noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Las notificaciones de eventos envían información acerca de los eventos a un servicio Service BrokerService Broker .Event notifications send information about events to a Service BrokerService Broker service. Las notificaciones de eventos se ejecutan como respuesta a una variedad de instrucciones del lenguaje de definición de datos (DDL) Transact-SQLTransact-SQL y eventos de Seguimiento de SQL enviando información acerca de esos eventos a un servicio de Service BrokerService Broker .Event notifications execute in response to a variety of Transact-SQLTransact-SQL data definition language (DDL) statements and SQL Trace events by sending information about these events to a Service BrokerService Broker service.

Las notificaciones de eventos se pueden usar para realizar lo siguiente:Event notifications can be used to do the following:

  • Registrar y revisar cambios o actividades que se producen en la base de datos.Log and review changes or activity occurring on the database.

  • Realizar una acción en respuesta a un evento de una forma asincrónica en lugar de sincrónica.Perform an action in response to an event in an asynchronous instead of synchronous manner.

Las notificaciones de eventos pueden ofrecer una alternativa de programación a los desencadenadores DDL y al Seguimiento de SQL.Event notifications can offer a programming alternative to DDL triggers and SQL Trace.

Ventajas de las notificaciones de eventosEvent Notifications Benefits

Las notificaciones de eventos se ejecutan asincrónicamente, fuera del ámbito de una transacción.Event notifications run asynchronously, outside the scope of a transaction. Por consiguiente, a diferencia de los desencadenadores DDL, las notificaciones de eventos se pueden usar dentro de una aplicación de bases de datos para responder a eventos sin usar los recursos definidos por la transacción inmediata.Therefore, unlike DDL triggers, event notifications can be used inside a database application to respond to events without using any resources defined by the immediate transaction.

A diferencia del Seguimiento de SQL, las notificaciones de eventos se pueden usar para realizar una acción en una instancia de SQL ServerSQL Server como respuesta a un evento de Seguimiento de SQL.Unlike SQL Trace, event notifications can be used to perform an action inside an instance of SQL ServerSQL Server in response to a SQL Trace event.

Los datos de eventos pueden ser usados por aplicaciones que se ejecutan junto con SQL ServerSQL Server para realizar un seguimiento del progreso y tomar decisiones.Event data can be used by applications that are running together with SQL ServerSQL Server to track progress and make decisions. Por ejemplo, la siguiente notificación de eventos envía un aviso a un servicio determinado cada vez que se emite una instrucción ALTER TABLE en la base de datos de ejemplo AdventureWorks2012AdventureWorks2012 .For example, the following event notification sends a notice to a certain service every time an ALTER TABLE statement is issued in the AdventureWorks2012AdventureWorks2012 sample database.

USE AdventureWorks2012;  
GO  
CREATE EVENT NOTIFICATION NotifyALTER_T1  
ON DATABASE  
FOR ALTER_TABLE  
TO SERVICE '//Adventure-Works.com/ArchiveService' ,  
    '8140a771-3c4b-4479-8ac0-81008ab17984';  

Conceptos de las notificaciones de eventosEvent Notifications Concepts

Cuando se crea una notificación de eventos, se abren una o más conversaciones de Service BrokerService Broker entre una instancia de SQL ServerSQL Server y el servicio de destino que se especifica.When an event notification is created, one or more Service BrokerService Broker conversations between an instance of SQL ServerSQL Server and the target service you specify are opened. Normalmente, las conversaciones permanecen abiertas mientras existe la notificación de eventos como objeto de la instancia de servidores.The conversations typically remain open as long as the event notification exists as an object on the server instance. En algunos casos de error, las conversaciones se pueden cerrar antes de que se quite la notificación de eventos.In some error cases the conversations can close before the event notification is dropped. Esas conversaciones nunca se comparten entre notificaciones de eventos.These conversations are never shared between event notifications. Cada notificación de eventos tiene sus propias conversaciones exclusivas.Every event notification has its own exclusive conversations. Al finalizar una conversación explícitamente se impide que el servicio de destino reciba más mensajes y la conversación no se vuelve a abrir la próxima vez que se activa la notificación de eventos.Ending a conversation explicitly prevents the target service from receiving more messages, and the conversation will not reopen the next time the event notification fires.

La información de eventos se proporciona al servicio Service BrokerService Broker como una variable de tipo xml que proporciona información acerca de cuándo se produce un evento, el objeto de la base de datos afectado, la instrucción de lote Transact-SQLTransact-SQL implicada y otra información.Event information is delivered to the Service BrokerService Broker service as a variable of type xml that provides information about when an event occurs, about the database object affected, the Transact-SQLTransact-SQL batch statement involved, and other information. Para obtener más información sobre el esquema XML producido por las notificaciones de eventos, vea EVENTDATA (Transact-SQL).For more information about the XML schema produced by event notifications, see EVENTDATA (Transact-SQL).

Notificaciones de eventos y DesencadenadoresEvent Notifications vs. Triggers

En la siguiente tabla se comparan y contrastan los desencadenadores y las notificaciones de eventos.The following table compares and contrasts triggers and event notifications.

DesencadenadoresTriggers Notificaciones de eventosEvent Notifications
Los desencadenadores DML responden a los eventos deL lenguaje de manipulación de datos (DML).DML triggers respond to data manipulation language (DML) events. Los desencadenadores DDL responden a los eventos deL lenguaje de definición de datos (DDL).DDL triggers respond to data definition language (DDL) events. Las notificaciones de eventos responden a los eventos DDL y a un subconjunto de eventos de Seguimiento de SQL.Event notifications respond to DDL events and a subset of SQL trace events.
Los desencadenadores pueden ejecutar código administrado de Common Language Runtime (CLR) o Transact-SQL.Triggers can run Transact-SQL or common language runtime (CLR) managed code. Las notificaciones de eventos no ejecutan código.Event notifications do not run code. En su lugar, envían mensajes xml a un servicio de Service Broker.Instead, they send xml messages to a Service Broker service.
Los desencadenadores se procesan sincrónicamente, en el ámbito de las transacciones que los activan.Triggers are processed synchronously, within the scope of the transactions that cause them to fire. Las notificaciones de eventos pueden procesarse de forma asincrónica y no se ejecutan en el ámbito de las transacciones que las activan.Event notifications may be processed asynchronously and do not run in the scope of the transactions that cause them to fire.
El consumidor de un desencadenador se une estrechamente al evento que lo activa.The consumer of a trigger is tightly coupled with the event that causes it to fire. El consumidor de una notificación de eventos se desliga del evento que lo activa.The consumer of an event notification is decoupled from the event that causes it to fire.
Los desencadenadores se deben procesar en el servidor local.Triggers must be processed on the local server. Las notificaciones de eventos se pueden procesar en un servidor remoto.Event notifications can be processed on a remote server.
Se pueden revertir los desencadenadores.Triggers can be rolled back. No se pueden revertir las notificaciones de eventos.Event notifications cannot be rolled back.
Los nombres de desencadenador DML se encuentran en el ámbito de esquema.DML trigger names are schema-scoped. Los nombres de desencadenador DDL se encuentran en el ámbito de la base de datos o del servidor.DDL trigger names are database-scoped or server-scoped. Los nombres de notificación de eventos se encuentran en el ámbito de la base de datos o del servidor.Event notification names are scoped by the server or database. Las notificaciones de eventos en un evento QUEUE_ACTIVATION se encuentran en el ámbito de una cola específica.Event notifications on a QUEUE_ACTIVATION event are scoped to a specific queue.
El mismo propietario posee los desencadenadores DML y las tablas en que se aplican.DML triggers are owned by the same owner as the tables on which they are applied. El propietario de una notificación de eventos en una cola puede tener un propietario diferente que el objeto en el que se aplica.The owner of an event notification on a queue may have a different owner than the object on which it is applied.
Los desencadenadores admiten la cláusula EXECUTE AS.Triggers support the EXECUTE AS clause. Las notificaciones de eventos no admiten la cláusula EXECUTE AS.Event notifications do not support the EXECUTE AS clause.
Se puede capturar la información de eventos del desencadenador DDL mediante la función EVENTDATA, que devuelve un tipo de datos xml .DDL trigger event information can be captured using the EVENTDATA function, which returns an xml data type. Las notificaciones de eventos envían información de eventos xml a un servicio de Service Broker.Event notifications send xml event information to a Service Broker service. El formato de la información usa el mismo esquema que la función EVENTDATA.The information is formatted to the same schema as that of the EVENTDATA function.
Los metadatos sobre los desencadenadores se encuentran en las vistas de catálogo sys.triggers y sys.server_triggers .Metadata about triggers is found in the sys.triggers and sys.server_triggers catalog views. Los metadatos sobre las notificaciones de eventos se encuentran en las vistas de catálogo sys.event_notifications y sys.server_event_notifications.Metadata about event notifications is found in the sys.event_notifications and sys.server_event_notifications catalog views.

Notificaciones de eventos y Seguimiento de SQLEvent Notifications vs. SQL Trace

En la siguiente tabla se compara y contrasta el uso de notificaciones de eventos y de la Seguimiento de SQL para supervisar eventos de servidor.The following table compares and contrasts using event notifications and SQL Trace for monitoring server events.

Seguimiento de SQLSQL Trace Notificaciones de eventosEvent Notifications
Seguimiento de SQL no genera carga de rendimiento asociada con transacciones.SQL Trace generates no performance overhead associated with transactions. El empaquetado de los datos es eficaz.Packaging of data is efficient. Existe una carga de rendimiento asociada con la creación de datos de eventos con formato XML y con el envío de notificaciones de eventos.There is performance overhead associated with creating the XML-formatted event data and sending the event notification.
Seguimiento de SQL puede supervisar y realizar un seguimiento de cualquier clase de evento.SQL Trace can monitor any trace event class. Los notificaciones de eventos pueden supervisar un subconjunto de clases de eventos de seguimiento y también todos los eventos del lenguaje de definición de datos (DDL).Event notifications can monitor a subset of trace event classes and also all data definition language (DDL) events.
Puede personalizar qué columnas de datos se crean en un evento de seguimiento.You can customize which data columns to generate in a trace event. El esquema de datos de eventos con formato XML devuelto por las notificaciones de eventos es fijo.The schema of the XML-formatted event data returned by event notifications is fixed.
Los eventos de seguimiento generados por DDL siempre se generan, independientemente de si la instrucción DDL se revierte.Trace events generated by DDL are always generated, regardless of whether the DDL statement is rolled back. Las notificaciones de eventos no se activan si el evento de la instrucción DDL correspondiente se revierte.Event notifications do not fire if the event in the corresponding DDL statement is rolled back.
La administración del flujo intermedio de los datos de eventos de seguimiento implica llenar y administrar archivos de seguimiento o tablas de seguimiento.Managing the intermediate flow of trace event data involves populating and managing trace files or trace tables. La administración intermedia de los datos de notificación de eventos se consigue automáticamente mediante las colas de Service Broker.Intermediate management of event notification data is accomplished automatically through Service Broker queues.
Los seguimientos deben reiniciarse cada vez que se reinicia el servidor.Traces must be restarted every time the server restarts. Después de registrarse, las notificaciones de eventos persisten en ciclos de servidor y participan en transacciones.After being registered, event notifications persist across server cycles and are transacted.
Tras reiniciarse, la activación de los seguimientos no se puede controlar.After being initiated, the firing of traces cannot be controlled. Las horas de detención y filtrado se pueden usar para especificar cuándo se inician.Stop times and filter times can be used to specify when they initiate. Se obtiene acceso a los seguimientos sondeando el archivo de seguimientos correspondiente.Traces are accessed by polling the corresponding trace file. Las notificaciones de eventos se pueden controlar utilizando la instrucción WAITFOR sobre la cola que recibe el mensaje generado por la notificación de eventos.Event notifications can be controlled by using the WAITFOR statement against the queue that receives the message generated by the event notification. Se puede obtener acceso a ellas sondeando la cola.They can be accessed by polling the queue.
ALTER TRACE es el permiso mínimo necesario para crear un seguimiento.ALTER TRACE is the least permission that is required to create a trace. También se requiere el permiso para crear un archivo de seguimiento en el equipo correspondiente.Permission is also required to create a trace file on the corresponding computer. El permiso mínimo depende del tipo de notificación de eventos que se está creando.Least permission depends on the type of event notification being created. El permiso RECEIVE también es necesario en la cola correspondiente.RECEIVE permission is also needed on the corresponding queue.
Los seguimientos se pueden recibir remotamente.Traces can be received remotely. Las notificaciones de eventos se pueden recibir remotamente.Event notifications can be received remotely.
Los eventos de seguimiento se implementan utilizando procedimientos almacenados del sistema.Trace events are implemented by using system stored procedures. Las notificaciones de eventos se implementan mediante una combinación de instrucciones Motor de base de datosDatabase Engine y Service BrokerService BrokerTransact-SQLTransact-SQL .Event notifications are implemented by using a combination of Motor de base de datosDatabase Engine and Service BrokerService BrokerTransact-SQLTransact-SQL statements.
Se puede obtener acceso a los datos de eventos de seguimiento mediante programación consultando la tabla de seguimiento correspondiente, analizando el archivo de seguimiento o usando la clase TraceReader de los objetos de administración de SQL ServerSQL Server (SMO).Trace event data can be accessed programmatically by querying the corresponding trace table, parsing the trace file, or using the SQL ServerSQL Server Management Objects (SMO) TraceReader Class. Se obtiene acceso a los datos de eventos mediante programación emitiendo XQuery sobre los datos de eventos con formato XML, o mediante las clases SMO Event.Event data is accessed programmatically by issuing XQuery against the XML-formatted event data, or by using the SMO Event classes.

Tareas de las notificaciones de eventosEvent Notification Tasks

TareaTask TemaTopic
Describe cómo crear e implementar notificaciones de eventos.Describes how to create and implement event notifications. Implementar notificaciones de eventosImplement Event Notifications
Describe cómo configurar la seguridad de diálogo de Service BrokerService Broker para las notificaciones de evento que envían mensajes a un Service Broker en un servidor remoto.Describes how to configure Service BrokerService Broker dialog security for event notifications that send messages to a service broker on a remote server. Configurar la seguridad de diálogo para notificaciones de eventosConfigure Dialog Security for Event Notifications
Describe cómo devolver información acerca de las notificaciones de eventos.Describes how to return information about event notifications. Obtener información sobre notificaciones de eventosGet Information About Event Notifications

Consulte tambiénSee Also

Desencadenadores DDL DDL Triggers
Desencadenadores DML DML Triggers
Seguimiento de SQLSQL Trace