Conception de notifications d'événements

Pour concevoir une notification d'événement, vous devez déterminer les éléments suivants :

  • Portée de la notification

  • L'instruction Transact-SQL, ou groupe d'instructions, qui déclenche la notification d'événement.

[!REMARQUE]

Les notifications d'événements ne s'exécutent pas en réponse aux événements affectant les procédures stockées et les tables temporaires locales ou globales.

Définition de la portée d'une notification

Vous pouvez définir une notification d'événement qui s'exécute en réponse à une instruction portant sur tous les objets de la base de données active ou sur tous les objets d'une instance SQL Server. Les notifications spécifiées dans les événements QUEUE_ACTIVATION et BROKER_QUEUE_DISABLED ont une portée limitée aux files d'attente individuelles. Certains événements ne peuvent pas se produire dans toutes les portées. Par exemple, les événements CREATE_DATABASE ne peuvent se produire qu'au niveau de l'instance du serveur. En revanche, une notification créée sur un événement ALTER_TABLE peut être programmée pour s'exécuter sur toutes les tables de la base de données ou sur toutes les tables de l'instance de serveur.

L'exemple suivant envoie à l'instance Service Broker de la base de données en cours la notification d'une instruction ALTER TABLE exécutée sur l'instance de serveur.

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

Vous trouverez des liens concernant les instructions Transact-SQL et les portées pouvant leur être spécifiées dans la section « Sélection d'une instruction DDL particulière pour déclencher une notification d'événement » ci-après.

Spécification d'une instruction ou d'un groupe d'instructions Transact-SQL

Vous pouvez créer des notifications d'événements qui s'exécutent en réponse à :

  • Une instruction DDL particulière, un événement de trace SQL ou un événement Service Broker

  • Un groupe prédéfini d'instructions DDL ou d'événements de trace SQL

Sélection d'une instruction DDL particulière pour déclencher une notification d'événement

Les notifications d'événements peuvent être conçues pour se déclencher après l'exécution d'une instruction Transact-SQL ou d'une procédure stockée particulière. Comme illustré dans l'exemple précédent, cette notification d'événement se produit après un événement ALTER_TABLE.

Pour obtenir la liste des instructions Transact-SQL pouvant être spécifiées afin de déclencher une notification d'événement et définir la portée selon laquelle les notifications peuvent s'exécuter, consultez Événements DDL. Vous pouvez également vous procurer ces événements en interrogeant l'affichage catalogue sys.event_notification_event_types.

[!REMARQUE]

Certaines procédures stockées système qui effectuent des opérations de type DDL peuvent également déclencher des notifications d'événements. Testez vos notifications d'événements pour déterminer leurs réponses aux procédures stockées système exécutées. Par exemple, l'instruction CREATE TYPE et la procédure stockée sp_addtype déclenchent toutes les deux une notification d'événement générée dans un événement CREATE_TYPE.

Sélection d'un événement de trace SQL particulier pour déclencher une notification d'événement

Les notifications d'événements peuvent être conçues pour se déclencher après un événement de trace SQL. Par exemple, la notification d'événement suivante se déclenche après un événement Object_Created sur le serveur.

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

Pour une liste des événements SQL Trace qui peuvent déclencher une notification d'événements, consultez Événements de trace utilisables avec les notifications d'événements. Vous pouvez également vous procurer une liste de ces événements en interrogeant l'affichage catalogue sys.event_notification_event_types. Les événements de trace SQL ne peuvent être exécutés qu'avec la portée d'instance de serveur. Pour plus d'informations sur les classes d'événements de trace SQL, consultez Guide de référence du Générateur de profils SQL Server.

Sélection d'un événement Service Broker pour déclencher une notification d'événement

Les notifications d'événements peuvent être conçues pour se déclencher après un événement Service Broker QUEUE_ACTIVATION ou BROKER_QUEUE_DISABLED. L'événement QUEUE_ACTIVATION se produit lorsqu'une file d'attente contient des messages à traiter. Pour plus d'informations, consultez Activation basée sur des événements. L'événement BROKER_QUEUE_DISABLED se produit lorsqu'une file d'attente a le statut OFF. Pour plus d'informations, consultez Gestion des messages incohérents.

Sélection d'un groupe prédéfini d'instructions DDL pour déclencher une notification d'événement

Une notification d'événement peut se produire après l'exécution d'un événement Transact-SQL appartenant à un regroupement prédéfini d'événements similaires. Par exemple, si vous souhaitez qu'une notification d'événement se produise après l'exécution d'une instruction CREATE TABLE, ALTER TABLE ou DROP TABLE, vous pouvez spécifier FOR DDL_TABLE_EVENTS dans l'instruction CREATE EVENT NOTIFICATION. Après exécution de CREATE EVENT NOTIFICATION, le groupe d’événements est ajouté à l'affichage catalogue sys.events.

[!REMARQUE]

Dans SQL Server 2005, sys.events développe des groupes d'événement en listant uniquement les événements individuels couverts par un groupe. Par conséquent, les modifications apportées aux événements couverts par les groupes d'événement dans SQL Server 2008 ne s'appliquent pas aux notifications d'événements créées sur ces groupes d'événement dans SQL Server 2005.

Pour obtenir la liste des groupes d'instructions DDL et DML prédéfinis disponibles pour les notifications d'événements, les instructions qu'ils couvrent et la portée d'exécution de ces groupes d'événements, consultez Groupes d'événements DDL.

Sélection d'un groupe prédéfini d'événements de trace SQL pour déclencher une notification d'événement

Une notification d'événement peut se déclencher après n'importe quel événement de trace SQL appartenant à un regroupement prédéfini d'événements de trace similaires. Par exemple, si vous souhaitez qu'une notification d'événement soit exécutée après n'importe quel événement de trace lié au verrouillage, lequel inclut les événements LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION et DEADLOCK_GRAPH, vous pouvez spécifier FOR TRC_LOCKS dans l'instruction CREATE EVENT NOTIFICATION.

Pour obtenir la liste des groupes prédéfinis d'événements de trace SQL disponibles pour les notifications d'événements, consultez Groupes d'événements de trace à utiliser avec des notifications d'événement. Ces groupes ne peuvent s'exécuter qu'au niveau de l'instance de serveur.