Présentation du fournisseur WMI pour les événements serveur
Le fournisseur WMI pour les événements de serveur vous permet d’utiliser Windows Management Instrumentation (WMI) pour surveiller les événements dans SQL Server. Le fournisseur fonctionne en transformant SQL Server en objet WMI managé. Tout événement pouvant générer une notification d’événement dans SQL Server peut être exploité par WMI à l’aide de ce fournisseur. En outre, en tant qu’application de gestion qui interagit avec WMI, SQL Server Agent pouvez répondre à ces événements, ce qui augmente l’étendue des événements couverts par SQL Server Agent par rapport aux versions antérieures.
Les applications de gestion telles que SQL Server Agent peuvent accéder aux événements SQL Server à l’aide du fournisseur WMI pour les événements de serveur en émettant des instructions WMI Query Language (WQL). 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 Concepts du fournisseur WMI pour les événements de serveur. Les événements qui peuvent être interrogés sont répertoriés dans Le fournisseur WMI pour les classes et propriétés d’événements de serveur.
Lorsqu’un événement se produit et déclenche la notification d’événement pour envoyer un message, le message est envoyé à un service cible prédéfini dans msdb qui est nommé SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Le service place l’événement dans une file d’attente prédéfinie dans msdb nommée WMIEventProviderNotificationQueue. (Le service et la file d’attente sont créés dynamiquement par le fournisseur lors de sa première connexion à SQL Server.) Le fournisseur lit ensuite les données d’événement de cette file d’attente et les transforme en format d’objet managé (MOF) avant de les renvoyer à 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 = 'AdventureWorks'
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 AdventureWorks ;
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
de la TO SERVICE
clause est le GUID qui identifie le répartiteur instance dans la base de données msdb.
Pour plus d’informations sur l’utilisation de 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 de serveur vers un 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 de serveur pour chaque instance de SQL Server et le format est : \\.\root\Microsoft\SqlServer\ServerEvents\instance_name, où instance_name est défini par défaut sur MSSQLSERVER. Pour plus d’informations sur la connexion à un espace de noms WMI pour un instance de SQL Server, consultez Utilisation de WQL avec le fournisseur WMI pour les événements de serveur.
La DLL du fournisseur, Sqlwep.dll, n’est chargée qu’une seule fois dans le service hôte WMI du système d’exploitation du serveur, quel que soit le nombre d’instances de SQL Server sur le serveur.
Pour obtenir un exemple d’application de gestion SQL Server Agent qui utilise le fournisseur WMI pour les événements de serveur, consultez Exemple : création d’une alerte SQL Server Agent à l’aide du 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 de serveur dans le code managé, consultez Exemple : Utilisation du fournisseur d’événements WMI dans le code managé. Plus d’informations sont également disponibles sur WMI dans le Kit de développement logiciel (SDK) Microsoft .NET Framework.