Progettazione di notifiche degli eventi

Per progettare una notifica degli eventi, è necessario determinare i fattori seguenti:

  • Ambito della notifica.

  • Istruzione o gruppo di istruzioni Transact-SQL che genera la notifica degli eventi.

[!NOTA]

Le notifiche degli eventi non vengono generate in risposta a eventi che interessano tabelle temporanee locali o globali e stored procedure.

Definizione dell'ambito della notifica

È possibile specificare una notifica degli eventi affinché venga generata in risposta a un'istruzione eseguita in tutti gli oggetti del database corrente o in tutti gli oggetti di un'istanza di SQL Server. Le notifiche degli eventi specificate negli eventi QUEUE_ACTIVATION e BROKER_QUEUE_DISABLED sono definite a livello di ambito di query singole. Non tutti gli eventi possono verificarsi in qualsiasi ambito. Gli eventi CREATE_DATABASE, ad esempio, possono verificarsi solo a livello di istanza del server. Una notifica degli eventi creata in un evento ALTER_TABLE, viceversa, può essere programmata per l'esecuzione in tutte le tabelle del database o in tutte le tabelle dell'istanza del server.

Nell'esempio seguente viene inviata una notifica di qualsiasi istruzione ALTER TABLE eseguita nell'istanza del server all'istanza di Service Broker nel database corrente.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR ALTER_TABLE 
   TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';

I collegamenti alle istruzioni Transact-SQL e agli ambiti che possono essere specificati per tali istruzioni sono disponibili nella sezione "Selezione di un'istruzione DDL specifica per la generazione di una notifica degli eventi" riportata di seguito.

Definizione di un'istruzione o un gruppo di istruzioni Transact-SQL

È possibile creare notifiche degli eventi affinché vengano generate in risposta agli elementi seguenti:

  • Un'istruzione DDL, un evento di Traccia SQL o un evento di Service Broker specifico

  • Un gruppo predefinito di istruzioni DDL o di eventi di Traccia SQL

Selezione di un'istruzione DDL specifica per la generazione di una notifica degli eventi

È possibile progettare notifiche degli eventi affinché vengano generate in seguito all'esecuzione di un'istruzione Transact-SQL o di una stored procedure specifica. Come illustrato nell'esempio precedente, la notifica degli eventi viene generata dopo un evento ALTER_TABLE.

Per un elenco delle singole istruzioni Transact-SQL che possono essere specificate per generare una notifica degli eventi e informazioni sull'ambito in cui tali notifiche possono essere eseguite, vedere Eventi DDL. Questi eventi possono anche essere ottenuti eseguendo una query nella vista del catalogo sys.event_notification_event_types.

[!NOTA]

Alcune stored procedure di sistema che eseguono operazioni di tipo DDL possono inoltre generare notifiche degli eventi. Testare le notifiche degli eventi per determinare la loro risposta alle stored procedure di sistema eseguite. Sia l'istruzione CREATE TYPE che la stored procedure sp_addtype, ad esempio, genereranno una notifica degli eventi creata in un evento CREATE_TYPE.

Selezione di un evento di Traccia SQL per la generazione di una notifica degli eventi

È possibile progettare notifiche degli eventi affinché vengano generate in seguito a un evento di Traccia SQL. La notifica degli eventi seguente, ad esempio, viene generata dopo un evento Object_Created nel server.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR Object_Created 
   TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;

Per un elenco degli eventi di traccia SQL che possono generare una notifica degli eventi, vedere Eventi di traccia utilizzabili con le notifiche degli eventi. È inoltre possibile ottenere un elenco di questi eventi eseguendo una query nella vista del catalogo sys.event_notification_event_types. Gli eventi di Traccia SQL possono essere eseguiti solo nell'ambito dell'istanza del server. Per ulteriori informazioni sulle classi di evento di Traccia SQL, vedere Guida di riferimento a SQL Server Profiler.

Selezione di un evento di Service Broker per la generazione di una notifica degli eventi

È possibile progettare notifiche degli eventi affinché vengano generate in seguito a un evento QUEUE_ACTIVATION o BROKER_QUEUE_DISABLED di Service Broker. L'evento QUEUE_ACTIVATION viene generato quando una coda include messaggi da elaborare. Per ulteriori informazioni, vedere Attivazione basata su eventi. L'evento BROKER_QUEUE_DISABLED viene generato se lo stato di una coda è impostato su OFF. Per ulteriori informazioni, vedere Gestione di messaggi non elaborabili.

Selezione di un gruppo predefinito di istruzioni DDL per la generazione di una notifica degli eventi

Una notifica degli eventi può essere generata in seguito all'esecuzione di qualsiasi evento Transact-SQL appartenente a un raggruppamento predefinito di eventi simili. Se, ad esempio, si desidera che una notifica degli eventi venga generata in seguito all'esecuzione di qualsiasi istruzione CREATE TABLE, ALTER TABLE o DROP TABLE, è possibile specificare FOR DDL_TABLE_EVENTS nell'istruzione CREATE EVENT NOTIFICATION. In seguito all'esecuzione di CREATE EVENT NOTIFICATION, il gruppo di eventi viene aggiunto alla vista del catalogo sys.events.

[!NOTA]

In SQL Server 2005sys.events espande gruppi di eventi elencando solo i singoli eventi inclusi in un gruppo. Le modifiche agli eventi inclusi nei gruppi di eventi in SQL Server 2008 non vengono pertanto applicate alle notifiche degli eventi create in tali gruppi di eventi in SQL Server 2005.

Per un elenco dei gruppi predefiniti di istruzioni DDL e DML disponibili per le notifiche degli eventi e per informazioni sulle istruzioni specifiche incluse in tali gruppi e sull'ambito in cui questi ultimi possono essere eseguiti, vedere Gruppi di eventi DDL.

Selezione di un gruppo predefinito di eventi di Traccia SQL per la generazione di una notifica degli eventi

Una notifica degli eventi può essere generata in seguito all'esecuzione di qualsiasi evento di Traccia SQL appartenente a un raggruppamento predefinito di eventi di traccia simili. Se, ad esempio, si desidera che una notifica degli eventi venga generata in seguito a tutti gli eventi di traccia relativi ai blocchi, che includono gli eventi LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION e DEADLOCK_GRAPH, è possibile specificare FOR TRC_LOCKS nell'istruzione CREATE EVENT NOTIFICATION.

Per un elenco dei gruppi predefiniti di eventi di Traccia SQL disponibili per le notifiche degli eventi, vedere Gruppi di eventi di traccia da utilizzare con le notifiche di eventi. Tali gruppi possono essere eseguiti solo a livello di istanza del server.