Implémenter des notifications d'événements

S’applique à :SQL Server

Pour implémenter une notification d'événement, vous devez créer un service cible destiné à recevoir les notifications d'événements avant de créer la notification d'événement.

Important

Service Broker doit être configurée pour les notifications d'événements qui envoient des messages à un Service Broker résidant sur un serveur distant. La sécurité du dialogue doit être configurée manuellement conformément au modèle de sécurité totale.

Création du service cible

Vous n’avez pas besoin de créer un service d’initialisation Service Broker, car Service Broker inclut le type de message et le contrat spécifiques suivants pour les notifications d’événements :

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification  

Le service cible qui reçoit les notifications d'événements doit respecter ce contrat préexistant.

Pour créer un service cible:

  1. Créez une file d'attente pour recevoir les messages.

    Note

    Cette file d'attente reçoit le type de message suivant : http://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Créez un service dans la file d'attente qui fasse référence au contrat de notification d'événement.

  3. Créez un itinéraire sur le service pour définir l’adresse à laquelle Service Broker envoie des messages pour le service. Si la notification d'événement a pour cible un service de la même base de données, spécifiez ADDRESS = 'LOCAL'.

    Note

    Le routage Service Broker détermine le service qui reçoit les messages de notification. Si votre notification d'événement a pour cible un service de serveur distant, il convient de définir des itinéraires à la fois sur le serveur source et sur le serveur cible pour éviter des erreurs de communication bidirectionnelle.

L'exemple suivant illustre la création d'une file d'attente, d'un service au niveau de cette file d'attente, et d'un itinéraire au niveau du service en vue de gérer les messages relevant du contrat de notification d'événement.

CREATE QUEUE NotifyQueue ;  
GO  
CREATE SERVICE NotifyService  
ON QUEUE NotifyQueue  
(  
[http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]  
);  
GO  
CREATE ROUTE NotifyRoute  
WITH SERVICE_NAME = 'NotifyService',  
ADDRESS = 'LOCAL';  
GO  

Création de la notification d'événement

Les notifications d’événements sont créées à l’aide de l’instruction Transact-SQL CREATE EVENT NOTIFICATION et sont supprimées à l’aide de l’INSTRUCTION DROP EVENT NOTIFICATION. Pour modifier une notification d'événement, vous devez la supprimer et la recréer.

L'exemple suivant crée la notification d'événement CreateDatabaseNotification. Cette notification envoie un message à propos de tout événement CREATE_DATABASE qui se produit sur le serveur au service NotifyService précédemment créé.

CREATE EVENT NOTIFICATION CreateDatabaseNotification  
ON SERVER  
FOR CREATE_DATABASE  
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;  

Attention

Les notifications d’événements reconnaissent les événements CREATE_SCHEMA et les <définitions schema_element> des instructions CREATE SCHEMA en tant qu’événements distincts. Par exemple, une notification d'événement est créée sur les deux événements CREATE_SCHEMA et CREATE_TABLE, et vous exécutez le traitement suivant.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

Dans ce cas, la notification d'événement est déclenchée deux fois : une première fois quand se produit l'événement CREATE_SCHEMA, et une deuxième fois quand se produit l'événement CREATE_TABLE. Nous vous recommandons d’éviter de créer des notifications d’événements sur les événements CREATE_SCHEMA et les <textes schema_element> de toutes les définitions CREATE SCHEMA correspondantes, ou de générer une logique dans votre application pour éviter de capturer des données d’événements indésirables.

Pour créer une notification d'événement

Pour supprimer une notification d'événement

Voir aussi

Obtenir des informations concernant les notifications d'événements
EVENTDATA (Transact-SQL)