Présentation du fournisseur WMI pour les événements serveur
Le fournisseur WMI pour les événements SQL Server vous permet d'utiliser WMI (Windows Management Instrumentation) pour surveiller les événements dans SQL Server. Ce fournisseur fonctionne en transformant SQL Server en un objet WMI managé. Tout événement qui peut générer une notification d'événements dans SQL Server peut tirer parti de WMI via ce fournisseur. En outre, l'Agent SQL Server, en tant qu'application de gestion qui interagit avec WMI, peut répondre à ces événements, ce qui augmente l'étendue des événements traités par l'Agent SQL Server par rapport aux versions antérieures.
Les applications de gestion telles que l'Agent SQL Server peuvent accéder aux événements SQL Server via le fournisseur WMI pour les événements serveur en publiant des instructions WQL (WMI Query Language). Le langage WQL est un sous-ensemble simplifié du langage SQL, avec quelques extensions spécifiques à WMI. À l'aide du langage WQL, une application récupère un type d'événement à partir d'une base de données ou d'un objet de base de données spécifique. Le fournisseur WMI pour les événements serveur traduit la requête en une notification d'événements, ce qui entraîne la création effective d'une notification d'événements dans la base de données cible. Pour plus d'informations sur le fonctionnement des notifications d'événements dans SQL Server, consultez Notifications d'événements (moteur de base de données). Les événements qui peuvent être interrogés sont répertoriés dans la rubrique Fournisseur WMI pour les classes et propriétés d'événements serveur.
Lorsqu'un événement se produit, ce qui déclenche l'envoi d'un message par la fonctionnalité de notification d'événements, ce message parvient à un service cible prédéfini dans msdb nommé SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Le service place l'événement dans msdb, dans une file d'attente prédéfinie nommée WMIEventProviderNotificationQueue. (Le service et la file d'attente sont créés dynamiquement par le fournisseur lorsqu'il se connecte pour la première fois à SQL Server.) Le fournisseur lit ensuite les données d'événement de cette file d'attente et les convertit au format MOF avant de les retourner à l'application. L'illustration ci-dessous montre ce processus.
Examinons, par exemple, la requête WQL suivante :
SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2008R2'
En réponse à cette requête, le fournisseur WMI pour les événements serveur crée la notification d'événements équivalente dans la base de données cible :
USE AdventureWorks2008R2 ;
GO
CREATE EVENT NOTIFICATION SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9
ON DATABASE
WITH FAN_IN
FOR DDL_DATABASE_LEVEL_EVENTS
TO SERVICE
'SQL/Notifications/ProcessWMIEventProviderNotification/v1.0',
'A7E5521A-1CA6-4741-865D-826F804E5135';
GO
Dans cet exemple, SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 est un identificateur Transact-SQL composé du préfixe SQLWEP_ et d'un GUID. SQLWEP crée un GUID pour chaque identificateur. La valeur A7E5521A-1CA6-4741-865D-826F804E5135 dans la clause TO SERVICE est le GUID qui identifie l'instance Service Broker dans la base de données msdb.
Pour plus d'informations sur l'utilisation du langage WQL, consultez Utilisation de WQL avec le fournisseur WMI pour les événements de serveur.
Les applications de gestion dirigent le fournisseur WMI pour les événements serveur vers une instance de SQL Server en se connectant à un espace de noms WMI défini par le fournisseur. Le service WMI de Windows mappe cet espace de noms à la DLL de fournisseur, Sqlwep.dll, puis la charge en mémoire. Le fournisseur gère un espace de noms WMI pour les événements serveur pour chaque instance de SQL Server. Le format est : \\.\racine\Microsoft\SqlServer\ServerEvents\nom_instance, où nom_instance a pour valeur par défaut MSSQLSERVER. Pour plus d'informations sur le mode de connexion à un espace de noms WMI pour une instance de SQL Server, consultez Utilisation du fournisseur WMI pour les événements de serveur.
La DLL de fournisseur, Sqlwep.dll, est chargée une seule fois dans le service hôte WMI du système d'exploitation du serveur, indépendamment du nombre d'instances de SQL Server présentes sur le serveur.
Pour obtenir un exemple d'application de gestion, telle que l'Agent SQL Server, qui utilise le fournisseur WMI pour les événements serveur, consultez Exemple : création d'une alerte de l'Agent SQL Server en utilisant le fournisseur WMI pour les événements de serveur. Pour obtenir un exemple d'application de gestion qui utilise le fournisseur WMI pour les événements serveur dans du code managé, consultez Exemple : utilisation du fournisseur d'événements WMI avec le .NET Framework. Des informations supplémentaires sur WMI sont également disponibles dans le Kit de développement Microsoft .NET Framework SDK.