Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour implémenter une notification d’événement, vous devez d’abord créer un service cible pour recevoir des notifications d’événements, puis créer la notification d’événement.
Important
La sécurité de la boîte de dialogue Service Broker doit être configurée pour les notifications d’événements qui envoient des messages à un service Broker sur un serveur distant. La sécurité de boîte de dialogue doit être configurée manuellement en fonction du modèle de sécurité complet.
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 des notifications d’événements doit respecter ce contrat préexistant.
Pour créer un service cible :
Créez une file d’attente pour recevoir des messages.
Remarque
La file d’attente reçoit le type de message suivant :
https://schemas.microsoft.com/SQL/Notifications/QueryNotification.Créez un service dans la file d’attente qui fait référence au contrat de notifications d’événements.
Créez un itinéraire sur le service pour définir l’adresse à laquelle Service Broker envoie des messages pour le service. Pour les notifications d’événements qui ciblent un service dans la même base de données, spécifiez
ADDRESS = 'LOCAL'.Remarque
Le routage Service Broker détermine le service qui reçoit les messages de notification. Si la notification d’événement cible un service sur un serveur distant, le serveur source et le serveur cible doivent avoir des itinéraires définis sur eux pour s’assurer que la communication bidirectionnelle se produit.
L’exemple suivant crée une file d’attente, un service sur la file d’attente et un itinéraire sur le service pour gérer les messages du contrat de notification d’événement.
CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[https://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 supprimer et recréer la notification d’événement.
L’exemple suivant crée la notification CreateDatabaseNotificationd’événement . Cette notification envoie un message sur tout événement CREATE_DATABASE qui a lieu sur le serveur au service NotifyService qui a été créé précédemment.
CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
Avertissement
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 événements CREATE_SCHEMA et CREATE_TABLE, et vous exécutez le lot suivant.
CREATE SCHEMA s
CREATE TABLE t1 (col1 int)
Dans ce cas, la notification d’événement est déclenchée deux fois : une fois lorsque l’événement CREATE_SCHEMA se produit, et à nouveau lorsque l’événement CREATE_TABLE se produit. 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 sur les notifications d’événements
EVENTDATA (Transact-SQL)