Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
S’applique à :SQL Server
Azure SQL Managed Instance
Crée un objet qui envoie des informations sur une base de données ou un événement serveur à un service Service Broker. Les notifications d'événements sont créées uniquement au moyen d'instructions Transact-SQL.
Conventions de la syntaxe Transact-SQL
Syntaxe
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' }
[ ; ]
Arguments
event_notification_name
Nom de la notification d’événement. Un nom de notification d’événement doit respecter les règles relatives aux identificateurs et doit être unique dans l’étendue dans laquelle ils sont créés : SERVER, DATABASEou object_name.
SERVER
Applique l'étendue de la notification d'événement à l'instance actuelle de SQL Server. Si elle est spécifiée, la notification se déclenche chaque fois que l’événement spécifié dans la FOR clause se produit n’importe où dans l’instance de SQL Server.
Notes
Cette option n’est pas disponible dans une base de données autonome.
DATABASE
Applique l'étendue de la notification d'événement à la base de données actuelle. Si elle est spécifiée, la notification se déclenche chaque fois que l’événement spécifié dans la FOR clause se produit dans la base de données active.
QUEUE
Applique l'étendue de la notification à une file d'attente spécifique dans la base de données actuelle.
QUEUE peut être spécifié uniquement si FOR QUEUE_ACTIVATION ou FOR BROKER_QUEUE_DISABLED est également spécifié.
queue_name
Nom de la file d’attente à laquelle la notification d’événement s’applique.
queue_name ne peut être spécifié que s’il QUEUE est spécifié.
AVEC FAN_IN
Indique à SQL Server d'envoyer un seul message par événement au service spécifié pour toutes les notifications d'événement qui :
- sont créées pour le même événement ;
- sont créées par le même principal (identifié par le même SID).
- Spécifient le même service et broker_instance_specifier.
- Spécifiez
WITH FAN_IN.
Par exemple, trois notifications d'événements sont créées. Toutes les notifications d’événement spécifient FOR ALTER_TABLE, la WITH FAN_INmême TO SERVICE clause et sont créées par le même SID. Lorsqu’une ALTER TABLE instruction est exécutée, les messages créés par ces trois notifications d’événements sont fusionnés en un. Par conséquent, le service cible reçoit uniquement un message de l'événement.
event_type
Nom d’un type d’événement qui provoque l’exécution de la notification d’événement.
event_type peut être un événement de type DDL Transact-SQL, Trace SQL ou Service Broker. Pour obtenir une liste des types d’événements DDL Transact-SQL éligibles, consultez Événements DDL. Les types d’événements Service Broker sont QUEUE_ACTIVATION et BROKER_QUEUE_DISABLED. Pour plus d’informations, consultez Notifications d’événements.
event_group
Nom d’un groupe prédéfini de types d’événements Transact-SQL ou TRACE SQL. Une notification d'événement peut se déclencher après l'exécution d'un événement qui appartient à un groupe d'événements. Pour obtenir une liste des groupes d’événements DDL, des événements Transact-SQL qu’ils couvrent et l’étendue à laquelle ils peuvent être définis, consultez Groupes d’événements DDL.
event_group agit également comme une macro, lorsque l’instruction CREATE EVENT NOTIFICATION se termine, en ajoutant les types d’événements qu’elle couvre à l’affichage sys.events catalogue.
'broker_service'
Spécifie le service cible qui reçoit les données de l'instance d'événement. SQL Server ouvre une ou plusieurs conversations avec le service cible de la notification d'événement. Ce service doit respecter le type de message d'événement et de contrat SQL Server utilisé pour envoyer le message.
Les conversations restent ouvertes jusqu'à ce que la notification d'événement soit supprimée. Certaines erreurs peuvent mettre fin aux conversations de manière anticipée. Le fait de mettre fin explicitement à certaines conversations ou à toutes les conversations peut empêcher le service cible de recevoir davantage de messages.
{ 'broker_instance_specifier' | 'base de données actuelle' }
Spécifie une instance de Service Broker par rapport à laquelle broker_service est résolu. La valeur d’un service Broker spécifique peut être acquise en interrogeant la service_broker_guid colonne de l’affichage sys.databases catalogue. Permet 'current database' de spécifier l’instance service Broker dans la base de données active.
'current database' est un littéral de chaîne ne respectant pas la casse.
Notes
Cette option n’est pas disponible dans une base de données autonome.
Notes
Service Broker intègre un type de message et un contrat spécialement conçus pour les notifications d'événements. Par conséquent, un service de lancement Service Broker n’a pas besoin d’être créé, car il existe déjà un nom de contrat qui spécifie le nom de contrat suivant : http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
Le service cible qui reçoit les notifications d'événements doit respecter ce contrat préexistant.
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. Pour plus d’informations, consultez Configurer la sécurité du dialogue pour les notifications d’événements.
Si une transaction d'événement qui active une notification est annulée, l'envoi de la notification d'événement est également annulé. Les notifications d’événements ne se déclenchent pas par une action définie dans un déclencheur lorsque la transaction est validée ou restaurée à l’intérieur du déclencheur. Étant donné que les événements de suivi ne sont pas liés par les transactions, les notifications d’événements basées sur les événements de trace sont envoyées, que la transaction qui les active soit restaurée.
Si la conversation entre le serveur et le service cible est interrompue après le déclenchement d'une notification d'événement, une erreur est signalée et la notification d'événement est supprimée.
La transaction d’événement qui a démarré la notification n’est pas affectée par la réussite ou l’échec de l’envoi de la notification d’événement.
Les échecs d'envoi de notification d'événement sont consignés.
Autorisations
Pour créer une notification d’événement étendue à la base de données (ON DATABASE), nécessite CREATE DATABASE DDL EVENT NOTIFICATION une autorisation dans la base de données active.
Pour créer une notification d’événement sur une instruction DDL étendue au serveur (ON SERVER), nécessite CREATE DDL EVENT NOTIFICATION une autorisation sur le serveur.
Pour créer une notification d’événement sur un événement de trace, vous devez CREATE TRACE EVENT NOTIFICATION disposer d’une autorisation sur le serveur.
Pour créer une notification d’événement étendue à une file d’attente, vous devez ALTER disposer d’autorisations sur la file d’attente.
Exemples
Notes
Dans Exemples A et B, le GUID de la TO SERVICE 'NotifyService' clause (8140a771-3c4b-4479-8ac0-81008ab17984) est spécifique à l’ordinateur sur lequel l’exemple a été configuré. Dans ce cas, c’était le GUID de la base de données AdventureWorks2025.
Pour copier et exécuter ces exemples, vous devez remplacer ce GUID par un GUID de votre ordinateur et de l'instance SQL Server. Comme expliqué dans la section Arguments , vous pouvez acquérir le « broker_instance_specifier » en interrogeant la service_broker_guid colonne de l’affichage sys.databases catalogue.
R. Créer une notification d’événement étendue au serveur
L'exemple suivant crée les objets nécessaires pour configurer un service cible à l'aide de Service Broker. Le service cible fait référence au type de message et de contrat du service à l'origine de l'initialisation spécifique aux notifications d'événements La notification d'événement est ensuite créée sur le service cible qui envoie une notification chaque fois qu'un événement de trace Object_Created se produit sur l'instance de 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 ([http://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';
B. Créer une notification d’événement étendue à la base de données
L'exemple suivant crée une notification d'événement sur le même service cible que l'exemple précédent. La notification d’événement s’active après qu’un ALTER_TABLE événement se soit produit dans la base de données d’exemple AdventureWorks2025.
CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
C. Obtenir des informations sur une notification d’événement délimitée par le serveur
L'exemple suivant interroge l'affichage catalogue sys.server_event_notifications pour obtenir des métadonnées sur la notification d'événement log_ddl1 créée avec une étendue de serveur.
SELECT *
FROM sys.server_event_notifications
WHERE name = 'log_ddl1';
D. Obtenir des informations sur une notification d’événement délimitée à la base de données
L'exemple suivant interroge l'affichage catalogue sys.event_notifications pour obtenir des métadonnées sur la notification d'événement Notify_ALTER_T1 créée avec une étendue de base de données.
SELECT *
FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1';