Condividi tramite


CREATE EVENT NOTIFICATION (Transact-SQL)

Data aggiornamento: 15 settembre 2007

Crea un oggetto che invia a un servizio di Service Broker informazioni relative a un evento di un database o un server. Le notifiche degli eventi possono essere create solo mediante istruzioni Transact-SQL.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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' }
[ ; ]

Argomenti

  • event_notification_name
    Nome della notifica degli eventi. I nomi delle notifiche degli eventi devono essere conformi alle regole per gli identificatori e devono essere univoci nell'ambito in cui vengono creati, ovvero SERVER, DATABASE o object_name.
  • SERVER
    Indica che l'ambito della notifica degli eventi corrisponde all'istanza corrente di SQL Server. Se viene specificato questo parametro, la notifica viene attivata ogni volta che l'evento specificato nella clausola FOR si verifica nell'ambito dell'istanza di SQL Server.
  • DATABASE
    Indica che l'ambito della notifica degli eventi corrisponde al database corrente. Se viene specificato questo parametro, la notifica viene attivata ogni volta che l'evento specificato nella clausola FOR si verifica nel database corrente.
  • QUEUE
    Indica che l'ambito della notifica corrisponde a una coda specifica nel database corrente. QUEUE può essere utilizzato solo se viene specificato anche FOR QUEUE_ACTIVATION o FOR BROKER_QUEUE_DISABLED.
  • queue_name
    Nome della coda a cui viene applicata la notifica degli eventi. queue_name può essere specificato solo se viene utilizzato QUEUE.
  • WITH FAN_IN
    Indica a SQL Server di inviare un solo messaggio per evento a qualsiasi servizio specificato per tutte le notifiche degli eventi che:

    • Vengono create per lo stesso evento.
    • Vengono create dalla stessa entità, ovvero sono identificate dallo stesso SID.
    • Specificano lo stesso servizio e broker_instance_specifier.
    • Specificano WITH FAN_IN.

    Se ad esempio vengono create tre notifiche degli eventi con FOR ALTER_TABLE, WITH FAN_IN, la stessa clausola TO SERVICE e lo stesso SID, quando viene eseguita un'istruzione ALTER TABLE i messaggi creati da queste tre notifiche degli eventi vengono uniti in un unico messaggio. Il servizio di destinazione riceve pertanto un solo messaggio dell'evento.

  • event_group
    Nome di un gruppo predefinito di tipi di evento Transact-SQL o di Traccia SQL. Una notifica degli eventi può essere attivata dopo l'esecuzione di un qualsiasi evento appartenente a un gruppo di eventi. Per un elenco dei gruppi di eventi DDL, gli eventi Transact-SQL in essi inclusi e l'ambito rispetto a cui vengono definiti, vedere Gruppi di eventi DDL da utilizzare con le notifiche degli eventi. Per un elenco dei gruppi di eventi di traccia e gli eventi di traccia in essi inclusi, vedere Gruppi di eventi di traccia da utilizzare con le notifiche di eventi.

    event_group può anche essere utilizzato come macro, al termine dell'esecuzione dell'istruzione CREATE EVENT NOTIFICATION, che aggiunge i tipi di evento in esso inclusi nella vista del catalogo sys.events.

  • 'broker_service'
    Specifica il servizio di destinazione che riceve i dati dell'istanza dell'evento. SQL Server avvia una o più conversazioni con il servizio di destinazione per la notifica degli eventi. Questo servizio deve utilizzare lo stesso tipo di messaggio e lo stesso contratto per gli eventi di SQL Server applicati per l'invio del messaggio. Per ulteriori informazioni, vedere Creating Service Broker Services.

    Le conversazioni rimangono aperte fino a quando la notifica degli eventi non viene eliminata. Alcuni errori possono causare una terminazione anticipata delle conversazioni. Una terminazione esplicita di una parte delle conversazioni o di tutte le conversazioni può impedire al servizio di destinazione di ricevere ulteriori messaggi.

  • { 'broker_instance_specifier' | 'current database' }
    Specifica un'istanza di Service Broker in base a cui viene risolto l'argomento broker_service. Per ottenere il valore di un'istanza specifica di Service Broker, eseguire una query sulla colonna service_broker_guid della vista del catalogo sys.databases. Utilizzare 'current database' per specificare l'istanza di Service Broker nel database corrente. 'current database' è un valore letterale stringa senza distinzione tra maiuscole e minuscole.

Osservazioni

Service Broker prevede un tipo di messaggio e un contratto specifici per le notifiche degli eventi. Pertanto, essendo già disponibile un servizio di inizializzazione di Service Broker che specifica il nome di contratto https://schemas.microsoft.com/SQL/Notifications/PostEventNotification, non è necessario crearne uno.

Il servizio di destinazione che riceve le notifiche degli eventi deve rispettare il contratto esistente. Per ulteriori informazioni sulla creazione di servizi di destinazione di Service Broker, vedere Introduction to Service Broker Programming.

ms189453.note(it-it,SQL.90).gifImportante:
Per le notifiche degli eventi che inviano messaggi a Service Broker su un server remoto, è consigliabile configurare la protezione del dialogo di Service Broker. La protezione del dialogo deve essere configurata manualmente in base al modello di protezione avanzata. Per ulteriori informazioni, vedere Protezione del dialogo per le notifiche degli eventi.

Se viene eseguito il rollback di una transazione di evento che attiva una notifica, verrà annullato anche l'invio della notifica degli eventi. Le notifiche degli eventi non vengono attivate da un'azione definita in un trigger quando viene eseguito il commit o il rollback della transazione all'interno del trigger. Poiché gli eventi di traccia non sono associati a transazioni, le notifiche degli eventi basate su eventi di traccia vengono inviate anche se viene eseguito il rollback della transazione da cui sono attivate.

Se la conversazione tra il server e il servizio di destinazione viene interrotta dopo l'attivazione di una notifica degli eventi, viene segnalata la presenza di un errore e la notifica degli eventi viene eliminata.

La transazione di evento che aveva avviato in origine la notifica non è influenzata dall'esito positivo o negativo della notifica degli eventi.

Gli errori che si verificano durante l'invio di una notifica degli eventi vengono registrati.

Autorizzazioni

Per creare una notifica degli eventi con ambito database (ON DATABASE), è necessario disporre dell'autorizzazione CREATE DATABASE DDL EVENT NOTIFICATION per il database corrente.

Per creare una notifica degli eventi per un'istruzione DDL con ambito server (ON SERVER), è necessario disporre dell'autorizzazione CREATE DDL EVENT NOTIFICATION nel server.

Per creare una notifica degli eventi per un evento di traccia, è necessario disporre dell'autorizzazione CREATE TRACE EVENT NOTIFICATION nel server.

Per creare una notifica degli eventi con ambito coda, è necessario disporre dell'autorizzazione ALTER per la coda.

Esempi

[!NOTA] Negli Esempi A e B, GUID fornito nella clausola TO SERVICE'NotifyService' ('8140a771-3c4b-4479-8ac0-81008ab17984') è specifico del computer sul quale è configurato l'esempio. Per quell'istanza del computer che è GUID per il database AdventureWorks. Per copiare ed eseguire questi esempi è necessario sostituire tale GUID con uno dal computer e istanza SQL Server. Come spiegato nella definizione { 'broker_instance_specifier' | 'current database' } nella sezione Argomenti in alto, è possibile acquisire 'broker_instance_specifier' eseguendo una query nella colonna service_broker_guid della vista di catalogo sys.databases.

A. Creazione di una notifica degli eventi con ambito server

Nell'esempio seguente vengono creati gli oggetti necessari per la configurazione di un servizio di destinazione con Service Broker. Il servizio di destinazione fa riferimento al tipo di messaggio e al contratto del servizio di inizializzazione per le notifiche degli eventi, quindi viene creata una notifica degli eventi per tale servizio di destinazione che invia una notifica ogni volta che si verifica un evento di traccia Object_Created nell'istanza di 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. Creazione di una notifica degli eventi con ambito database

Nell'esempio seguente viene creata una notifica degli eventi per lo stesso servizio di destinazione utilizzato nell'esempio precedente. La notifica degli eventi viene attivata dopo che si verifica un evento ALTER_TABLE nel database di esempio AdventureWorks.

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

C. Recupero di informazioni su una notifica degli eventi con ambito server

Nell'esempio seguente viene eseguita una query sulla vista del catalogo sys.server_event_notifications per recuperare metadati sulla notifica degli eventi log_ddl1 definita a livello di ambito del server.

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

D. Recupero di informazioni su una notifica degli eventi con ambito database

Nell'esempio seguente viene eseguita una query sulla vista del catalogo sys.event_notifications per recuperare metadati sulla notifica degli eventi Notify_ALTER_T1 definita a livello di ambito del database.

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

Vedere anche

Riferimento

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)

Altre risorse

Implementazione di notifiche degli eventi

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

5 dicembre 2005

Nuovo contenuto
  • Aggiunta di un chiarimento alla descrizione della clausola WITH FAN_IN.
  • Aggiunta di una nota Importante che indirizza gli utenti a un argomento distinti sulla configurazione della protezione del dialogo di Service Broker per le notifiche degli eventi per server remoti.

15 settembre 2007

Nuovo contenuto:
  • Aggiunta di una nota sulla sostituzione di GUID durante l'esecuzione del codice negli esempi.