Condividi tramite


Notifiche degli eventi

Le notifiche degli eventi inviano informazioni sugli eventi a un servizio Service Broker. Le notifiche degli eventi vengono eseguite in risposta a un'ampia gamma di istruzioni DDL (Data Definition Language) Transact-SQL e eventi di traccia SQL inviando informazioni su questi eventi a un servizio di Service Broker.

Le notifiche degli eventi possono essere usate per eseguire le operazioni seguenti:

  • Registrare ed esaminare le modifiche o le attività che si verificano nel database.

  • Eseguire un'azione in risposta a un evento in modo asincrono anziché in modo sincrono.

Le notifiche degli eventi possono offrire un'alternativa di programmazione ai trigger DDL e alla traccia SQL.

Vantaggi delle notifiche degli eventi

Le notifiche degli eventi vengono eseguite in modo asincrono, all'esterno dell'ambito di una transazione. A differenza dei trigger DDL, pertanto, le notifiche degli eventi possono essere usate all'interno di un'applicazione di database per rispondere agli eventi senza usare risorse definite dalla transazione immediata.

A differenza di Traccia SQL, le notifiche degli eventi possono essere usate per eseguire un'azione all'interno di un'istanza di SQL Server in risposta a un evento di traccia SQL.

I dati degli eventi possono essere usati dalle applicazioni in esecuzione insieme a SQL Server per tenere traccia dello stato di avanzamento e prendere decisioni. Ad esempio, la notifica di evento seguente invia un avviso a un determinato servizio ogni volta che viene emessa un'istruzione ALTER TABLE nel database di esempio AdventureWorks2012 .

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 relativi alle notifiche degli eventi

Quando viene creata una notifica degli eventi, vengono aperte una o più conversazioni di Service Broker tra un'istanza di SQL Server e il servizio di destinazione specificato. Le conversazioni rimangono in genere aperte finché la notifica degli eventi esiste come oggetto nell'istanza del server. In alcuni casi di errore le conversazioni possono chiudersi prima dell'eliminazione della notifica degli eventi. Queste conversazioni non vengono mai condivise tra le notifiche degli eventi. Ogni notifica di eventi ha conversazioni esclusive. La chiusura esplicita di una conversazione impedisce al servizio di destinazione di ricevere più messaggi e la conversazione non verrà riaperta la prossima volta che viene attivata la notifica dell'evento.

Le informazioni sugli eventi vengono recapitate al servizio Service Broker come variabile di tipo xml che fornisce informazioni su quando si verifica un evento, sull'oggetto di database interessato, sull'Transact-SQL istruzione batch coinvolta e su altre informazioni. Per altre informazioni sull'XML Schema generato dalle notifiche degli eventi, vedere EVENTDATA (Transact-SQL).

Notifiche degli eventi e trigger

La tabella seguente confronta e contrasta i trigger e le notifiche degli eventi.

Attivatori Notifiche degli eventi
I trigger DML rispondono agli eventi DML (Data Manipulation Language). I trigger DDL rispondono agli eventi DDL (Data Definition Language). Le notifiche degli eventi rispondono agli eventi DDL e a un subset di eventi di traccia SQL.
I trigger possono eseguire Transact-SQL o codice gestito CLR (Common Language Runtime). Le notifiche degli eventi non eseguono codice. Invece, inviano xml messaggi a un servizio Service Broker.
I trigger vengono elaborati in modo sincrono, all'interno dell'ambito delle transazioni che ne causano l'attivazione. Le notifiche degli eventi possono essere elaborate in modo asincrono e non vengono eseguite nell'ambito delle transazioni che ne causano l'attivazione.
Il consumatore di un trigger è strettamente associato a un evento che lo attiva. Il consumatore di una notifica di un evento è indipendente dall'evento che lo genera.
I trigger devono essere elaborati nel server locale. Le notifiche degli eventi possono essere elaborate in un server remoto.
È possibile eseguire il rollback dei trigger. Non è possibile eseguire il rollback delle notifiche degli eventi.
I nomi dei trigger DML sono con ambito schema. I nomi dei trigger DDL sono limitati al database o al server. I nomi delle notifiche degli eventi hanno come ambito il server o il database. Le notifiche degli eventi su un evento QUEUE_ACTIVATION sono limitate a una coda specifica.
I trigger DML sono di proprietà dello stesso proprietario delle tabelle in cui vengono applicati. Il proprietario di una notifica di evento in una coda può avere un proprietario diverso da quello dell'oggetto a cui viene applicata.
I trigger supportano la clausola EXECUTE AS. Le notifiche degli eventi non supportano la clausola EXECUTE AS.
Le informazioni sugli eventi del trigger DDL possono essere acquisite usando la funzione EVENTDATA, che restituisce un xml tipo di dati. Le notifiche degli eventi inviano xml informazioni sugli eventi a un servizio Service Broker. Le informazioni vengono formattate nello stesso schema della funzione EVENTDATA.
I metadati relativi ai trigger sono disponibili nelle viste del catalogo sys.triggers e sys.server_triggers . I metadati relativi alle notifiche degli eventi sono disponibili nelle visualizzazioni del catalogo sys.event_notifications e sys.server_event_notifications .

Notifiche di eventi vs. Traccia SQL

Nella tabella seguente vengono confrontati e contrapposti l'uso delle notifiche degli eventi e di SQL Trace per il monitoraggio degli eventi del server.

Traccia SQL Notifiche degli eventi
Traccia SQL non genera alcun sovraccarico delle prestazioni associato alle transazioni. La creazione di pacchetti di dati è efficiente. Si verifica un sovraccarico delle prestazioni associato alla creazione dei dati dell'evento in formato XML e all'invio della notifica dell'evento.
SQL Trace può monitorare qualsiasi classe di evento di traccia. Le notifiche degli eventi possono monitorare un subset di classi di eventi di traccia e anche tutti gli eventi DDL (Data Definition Language).
È possibile personalizzare le colonne di dati da generare in un evento di traccia. Lo schema dei dati dell'evento in formato XML restituiti dalle notifiche degli eventi è corretto.
Gli eventi di traccia generati da DDL vengono sempre generati, indipendentemente dal fatto che venga eseguito il rollback dell'istruzione DDL. Le notifiche degli eventi non vengono attivate se viene eseguito il rollback dell'evento nell'istruzione DDL corrispondente.
La gestione del flusso intermedio dei dati degli eventi di traccia comporta il popolamento e la gestione di file di traccia o tabelle di traccia. La gestione intermedia dei dati di notifica degli eventi avviene automaticamente tramite le code di Service Broker.
Le tracce devono essere riavviate ogni volta che il server si riavvia. Dopo la registrazione, le notifiche degli eventi vengono mantenute tra i cicli del server e sono oggetto di transazione.
Dopo l'avvio, non è possibile controllare la generazione di tracce. I tempi di arresto e i tempi di filtro possono essere usati per specificare quando vengono avviate. È possibile accedere alle tracce eseguendo il polling del file di traccia corrispondente. Le notifiche di evento possono essere gestite usando l'istruzione WAITFOR sulla coda che riceve il messaggio generato dalla notifica di evento. È possibile accedervi interrogando la coda.
ALTER TRACE è l'autorizzazione minima necessaria per creare una traccia. È necessaria anche l'autorizzazione per creare un file di traccia nel computer corrispondente. L'autorizzazione minima dipende dal tipo di notifica degli eventi da creare. È necessaria anche l'autorizzazione RECEIVE nella coda corrispondente.
Le tracce possono essere ricevute in remoto. Le notifiche degli eventi possono essere ricevute in remoto.
Gli eventi di traccia vengono implementati tramite procedure memorizzate di sistema. Le notifiche degli eventi vengono implementate utilizzando una combinazione di istruzioni BrokerTransact-SQL del Motore di Database e del Servizio.
È possibile accedere ai dati degli eventi di traccia a livello di codice eseguendo una query sulla tabella di traccia corrispondente, analizzando il file di traccia o usando la classe TraceReader di SQL Server Management Objects (SMO). L'accesso ai dati dell'evento viene eseguito a livello di codice eseguendo XQuery sui dati dell'evento in formato XML o usando le classi di evento SMO.

Attività di notifica degli eventi

Attività Argomento
Descrive come creare e implementare le notifiche degli eventi. Implementare le notifiche degli eventi
Viene descritto come configurare la sicurezza della finestra di dialogo di Service Broker per le notifiche degli eventi che inviano messaggi a un Service Broker in un server remoto. Configurare la sicurezza della finestra di dialogo per le notifiche degli eventi
Viene descritto come restituire informazioni sulle notifiche degli eventi. Recupero di informazioni sulle notifiche degli eventi

Vedere anche

Trigger DDL
Trigger DML
Traccia SQL