Notifiche degli eventiEvent Notifications

Le notifiche degli eventi consentono l'invio di informazioni sugli eventi a un servizio di Service BrokerService Broker .Event notifications send information about events to a Service BrokerService Broker service. Le notifiche degli eventi vengono eseguite in risposta a una serie di istruzioni DDL (Data Definition Language) Transact-SQLTransact-SQL ed eventi di Traccia SQL mediante l'invio di informazioni sugli eventi a un servizio 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.

È possibile utilizzare le notifiche degli eventi per eseguire le attività seguenti:Event notifications can be used to do the following:

  • Registrare e visualizzare le modifiche o le attività riscontrate sul database.Log and review changes or activity occurring on the database.

  • Eseguire un'operazione in risposta a un evento in modo asincrono anziché sincrono.Perform an action in response to an event in an asynchronous instead of synchronous manner.

    Le notifiche degli eventi possono costituire un'alternativa a trigger DDL e Traccia SQL a livello di programmazione.Event notifications can offer a programming alternative to DDL triggers and SQL Trace.

Vantaggi delle notifiche di eventiEvent Notifications Benefits

Le notifiche degli eventi vengono eseguite in modo asincrono, all'esterno dell'ambito di una transazione.Event notifications run asynchronously, outside the scope of a transaction. A differenza dei trigger DDL, è pertanto possibile utilizzare le notifiche degli eventi all'interno di un'applicazione di database per rispondere a eventi senza utilizzare le risorse definite dalla transazione immediata.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 differenza della Traccia SQL, è possibile utilizzare le notifiche degli eventi per eseguire un'operazione all'interno di un'istanza di SQL ServerSQL Server in risposta a un evento di Traccia 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.

I dati degli eventi possono essere utilizzati in applicazioni eseguite contestualmente a SQL ServerSQL Server per tenere traccia dello stato di avanzamento e per prendere decisioni.Event data can be used by applications that are running together with SQL ServerSQL Server to track progress and make decisions. La notifica degli eventi seguente, ad esempio, invia un avviso a un determinato servizio ogni volta che viene eseguita un'istruzione ALTER TABLE nel database di esempio 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';  

Concetti delle notifiche di eventiEvent Notifications Concepts

Durante la creazione di una notifica degli eventi, vengono aperte una o più conversazioni Service BrokerService Broker tra un'istanza di SQL ServerSQL Server e il servizio di destinazione specificato.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. Tali conversazioni rimangono in genere aperte finché la notifica degli eventi è disponibile come oggetto nell'istanza del server.The conversations typically remain open as long as the event notification exists as an object on the server instance. In alcune situazioni di errore è possibile che le conversazioni vengano chiuse prima dell'eliminazione della notifica.In some error cases the conversations can close before the event notification is dropped. Le conversazioni non vengono mai condivise tra le notifiche degli eventi.These conversations are never shared between event notifications. A ogni notifica sono associate conversazioni esclusive.Every event notification has its own exclusive conversations. Se una conversazione viene terminata in modo esplicito, il servizio di destinazione non potrà più ricevere altri messaggi e la conversazione non verrà riaperta alla successiva attivazione della notifica degli eventi.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.

Le informazioni sugli eventi vengono fornite al servizio Service BrokerService Broker sotto forma di variabile di tipo xml. Tale variabile fornisce informazioni relative al momento in cui si verifica l'evento, all'oggetto di database interessato, all'istruzione batch Transact-SQLTransact-SQL, nonché informazioni di altro tipo.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. Per altre informazioni su XML Schema prodotto dalle notifiche degli eventi, vedere EVENTDATA (Transact-SQL).For more information about the XML schema produced by event notifications, see EVENTDATA (Transact-SQL).

Notifiche degli eventi e TriggerEvent Notifications vs. Triggers

Nella tabella seguente viene eseguito il confronto fra trigger e notifiche di eventi.The following table compares and contrasts triggers and event notifications.

TriggerTriggers Notifiche degli eventiEvent Notifications
I trigger DML rispondono agli eventi DML (Data Manipulation Language).DML triggers respond to data manipulation language (DML) events. I trigger DLL rispondono agli eventi DLL (Data Definition Language).DDL triggers respond to data definition language (DDL) events. Le notifiche degli eventi rispondono agli eventi DDL e a un subset di eventi di Traccia SQL.Event notifications respond to DDL events and a subset of SQL trace events.
I trigger possono eseguire codice gestito Transact-SQL o CLR (Common Language Runtime).Triggers can run Transact-SQL or common language runtime (CLR) managed code. Le notifiche degli eventi non eseguono codice,Event notifications do not run code. ma inviano messaggi xml a un servizio di Service Broker.Instead, they send xml messages to a Service Broker service.
I trigger vengono elaborati in modo sincrono nell'ambito delle transazioni che ne provocano l'attivazione.Triggers are processed synchronously, within the scope of the transactions that cause them to fire. Le notifiche degli eventi possono essere elaborate in modo asincrono e non vengono eseguite nell'ambito delle transazioni che le attivano.Event notifications may be processed asynchronously and do not run in the scope of the transactions that cause them to fire.
Il consumer di un trigger è strettamente associato all'evento che lo attiva.The consumer of a trigger is tightly coupled with the event that causes it to fire. Il consumer di una notifica degli eventi non è associato all'evento che la attiva.The consumer of an event notification is decoupled from the event that causes it to fire.
I trigger devono essere elaborati nel server locale.Triggers must be processed on the local server. Le notifiche degli eventi possono essere elaborate in un server remoto.Event notifications can be processed on a remote server.
Il rollback dei trigger è possibile.Triggers can be rolled back. Il rollback delle notifiche degli eventi non è possibile.Event notifications cannot be rolled back.
I nomi di trigger DML sono definiti a livello di ambito dello schema.DML trigger names are schema-scoped. L'ambito dei nomi dei trigger DDL è il server o il database.DDL trigger names are database-scoped or server-scoped. L'ambito dei nomi delle notifiche degli eventi è il server o il database.Event notification names are scoped by the server or database. Le notifiche degli eventi in un evento QUEUE_ACTIVATION sono definiti a livello di ambito di una coda specifica.Event notifications on a QUEUE_ACTIVATION event are scoped to a specific queue.
Il proprietario dei trigger DML è il proprietario delle tabelle sulle quali vengono applicati.DML triggers are owned by the same owner as the tables on which they are applied. Il proprietario di una notifica degli eventi in una coda può essere diverso dal proprietario dell'oggetto al quale viene applicata.The owner of an event notification on a queue may have a different owner than the object on which it is applied.
I trigger supportano la clausola EXECUTE AS.Triggers support the EXECUTE AS clause. Le notifiche degli eventi non supportano la clausola EXECUTE AS.Event notifications do not support the EXECUTE AS clause.
Le informazioni sull'evento di un trigger DDL possono essere acquisite usando la funzione EVENTDATA, che restituisce un tipo di dati xml .DDL trigger event information can be captured using the EVENTDATA function, which returns an xml data type. Le notifiche degli eventi inviano informazioni xml sull'evento a un servizio di Service Broker.Event notifications send xml event information to a Service Broker service. Le informazioni vengono formattate con lo stesso schema della funzione EVENTDATA.The information is formatted to the same schema as that of the EVENTDATA function.
I metadati relativi ai trigger si trovano nelle viste del catalogo sys.triggers e sys.server_triggers .Metadata about triggers is found in the sys.triggers and sys.server_triggers catalog views. I metadati relativi alle notifiche degli eventi si trovano nelle viste del catalogo sys.event_notifications e sys.server_event_notifications.Metadata about event notifications is found in the sys.event_notifications and sys.server_event_notifications catalog views.

Notifiche degli eventi e Traccia SQLEvent Notifications vs. SQL Trace

Nella tabella seguente vengono confrontate le caratteristiche delle notifiche degli eventi e della Traccia SQL per il monitoraggio degli eventi del server.The following table compares and contrasts using event notifications and SQL Trace for monitoring server events.

Traccia SQLSQL Trace Notifiche degli eventiEvent Notifications
In Traccia SQL non viene generato alcun overhead di prestazioni associato alle transazioni.SQL Trace generates no performance overhead associated with transactions. L'assemblaggio dei dati risulta efficace.Packaging of data is efficient. La creazione di dati di evento in formato XML e l'invio della notifica degli eventi comportano invece un certo overhead.There is performance overhead associated with creating the XML-formatted event data and sending the event notification.
In Traccia SQL viene eseguito il monitoraggio di qualsiasi classe di evento di traccia.SQL Trace can monitor any trace event class. Le notifiche degli eventi consentono di eseguire il monitoraggio di un subset di classi di evento di traccia, nonché di tutti gli eventi Data Definition Language (DDL).Event notifications can monitor a subset of trace event classes and also all data definition language (DDL) events.
È possibile personalizzare le colonne di dati da generare in un evento di traccia.You can customize which data columns to generate in a trace event. Lo schema dei dati di evento in formato XML restituiti dalle notifiche degli eventi è fisso.The schema of the XML-formatted event data returned by event notifications is fixed.
Gli eventi di traccia restituiti da DDL vengono sempre generati senza tener conto dell'eventuale rollback dell'istruzione DDL.Trace events generated by DDL are always generated, regardless of whether the DDL statement is rolled back. Le notifiche degli eventi non vengono attivate in caso di rollback dell'evento nell'istruzione DDL corrispondente.Event notifications do not fire if the event in the corresponding DDL statement is rolled back.
La gestione del flusso intermedio dei dati degli eventi di traccia comporta il popolamento e la gestione dei file o delle tabelle di traccia.Managing the intermediate flow of trace event data involves populating and managing trace files or trace tables. La gestione intermedia dei dati relativi alle notifiche degli eventi viene eseguita automaticamente tramite code Service Broker.Intermediate management of event notification data is accomplished automatically through Service Broker queues.
Le tracce devono essere riavviate a ogni riavvio del server.Traces must be restarted every time the server restarts. Dopo la registrazione, le notifiche degli eventi vengono mantenute anche in caso di riavvio del server e incluse nelle transazioni.After being registered, event notifications persist across server cycles and are transacted.
Dopo l'avvio, non è possibile controllare l'attivazione delle tracce.After being initiated, the firing of traces cannot be controlled. È possibile utilizzare orari di arresto e di filtro per specificare l'ora di avvio.Stop times and filter times can be used to specify when they initiate. Per accedere alle tracce, è necessario eseguire il polling del file di traccia corrispondente.Traces are accessed by polling the corresponding trace file. È possibile controllare le notifiche degli eventi eseguendo l'istruzione WAITFOR sulla coda che riceve il messaggio generato dalla notifica.Event notifications can be controlled by using the WAITFOR statement against the queue that receives the message generated by the event notification. Per accedere alle notifiche, è possibile eseguire il polling della coda.They can be accessed by polling the queue.
Per creare una traccia, è necessario disporre almeno dell'autorizzazione ALTER TRACE.ALTER TRACE is the least permission that is required to create a trace. È inoltre necessario disporre di un'autorizzazione per creare un file di traccia nel computer corrispondente.Permission is also required to create a trace file on the corresponding computer. L'autorizzazione minima dipende dal tipo di notifica degli eventi da creare.Least permission depends on the type of event notification being created. È inoltre necessaria l'autorizzazione RECEIVE sulla coda corrispondente.RECEIVE permission is also needed on the corresponding queue.
Le tracce possono essere ricevute in remoto.Traces can be received remotely. Le notifiche degli eventi possono essere ricevute in remoto.Event notifications can be received remotely.
Per l'implementazione di eventi di traccia vengono utilizzate stored procedure di sistema.Trace events are implemented by using system stored procedures. Per l'implementazione di notifiche di eventi viene usata una combinazione di istruzioni Motore di databaseDatabase Engine e Service BrokerService Broker Transact-SQLTransact-SQL .Event notifications are implemented by using a combination of Motore di databaseDatabase Engine and Service BrokerService Broker Transact-SQLTransact-SQL statements.
Per accedere ai dati degli eventi di traccia a livello di programmazione, è possibile eseguire una query nella tabella di traccia corrispondente, analizzare il file di traccia oppure usare la classe TraceReader di SMO ( SQL ServerSQL Server Management Objects).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. Per accedere ai dati degli eventi a livello di programmazione, è possibile eseguire XQuery sui dati degli eventi in formato XML oppure utilizzare le classi di evento di SMO.Event data is accessed programmatically by issuing XQuery against the XML-formatted event data, or by using the SMO Event classes.

Attività della notifica degli eventi.Event Notification Tasks

AttivitàTask ArgomentoTopic
Viene descritto come creare e implementare notifiche degli eventi.Describes how to create and implement event notifications. Implementazione di notifiche degli eventiImplement Event Notifications
Viene descritto come configurare la sicurezza del dialogo Service BrokerService Broker per le notifiche degli eventi che inviano messaggi a Service Broker su un server remoto.Describes how to configure Service BrokerService Broker dialog security for event notifications that send messages to a service broker on a remote server. Configurazione della sicurezza del dialogo per le notifiche degli eventiConfigure Dialog Security for Event Notifications
Viene descritto come restituire informazioni sulle notifiche degli eventi.Describes how to return information about event notifications. Recupero di informazioni sulle notifiche degli eventiGet Information About Event Notifications

Vedere ancheSee Also

Trigger DDL DDL Triggers
Trigger DML DML Triggers
Traccia SQL SQL Trace