Freigeben über


Grundlegendes zum WMI-Anbieter für Serverereignisse

Gilt für: SQL Server

Über den WMI-Anbieter für Serverereignisse können Sie Ereignisse in SQL Server mithilfe von WMI (Windows Management Instrumentation) überwachen. Der Anbieter funktioniert, indem SQL Server in ein verwaltetes WMI-Objekt umgewandelt wird. Jedes Ereignis, das eine Ereignisbenachrichtigung in SQL Server generieren kann, kann vom WMI mithilfe dieses Anbieters genutzt werden. Darüber hinaus kann SQL Server-Agent als Verwaltungsanwendung, die mit dem WMI interagiert, auf diese Ereignisse reagieren und den Umfang der Ereignisse erhöhen, die von SQL Server-Agent über frühere Versionen abgedeckt werden.

Verwaltungsanwendungen wie SQL Server-Agent können mithilfe des WMI-Anbieters für Serverereignisse mithilfe von WMI Query Language (WQL)-Anweisungen auf SQL Server-Ereignisse zugreifen. WQL ist eine vereinfachte Teilmenge von Structured Query Language (SQL) mit einigen WMI-spezifischen Erweiterungen. Bei Verwendung von WQL ruft eine Anwendung einen Ereignistyp für eine bestimmte Datenbank oder ein bestimmtes Datenbankobjekt ab. Der WMI-Anbieter für Serverereignisse übersetzt die Abfrage in eine Ereignisbenachrichtigung und erstellt dadurch auf effektive Weise eine Ereignisbenachrichtigung in der Zieldatenbank. Weitere Informationen dazu, wie Ereignisbenachrichtigungen in SQL Server funktionieren, finden Sie unter WMI-Anbieter für Serverereignisse-Konzepte. Die Ereignisse, die abgefragt werden können, werden in WMI-Anbieter für Serverereignisse Klassen und Eigenschaften aufgeführt.

Wenn ein Ereignis auftritt, das die Ereignisbenachrichtigung zum Senden einer Nachricht auslöst, wechselt die Nachricht zu einem vordefinierten Zieldienst in msdb diesem Benannten SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Der Dienst fügt das Ereignis in eine vordefinierte Warteschlange ein, die msdb den Namen WMIEventProviderNotificationQueuehat. (Sowohl der Dienst als auch die Warteschlange werden dynamisch vom Anbieter erstellt, wenn sie zuerst eine Verbindung mit SQL Server herstellt.) Der Anbieter liest dann die Ereignisdaten aus dieser Warteschlange und transformiert sie in das verwaltete Objektformat (MOF), bevor es an die Anwendung zurückgegeben wird. Die folgende Abbildung veranschaulicht diesen Prozess.

Flussdiagramm des WMI-Anbieters für Serverereignisse.

Betrachten Sie beispielsweise folgende WQL-Abfrage:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2022';

Als Reaktion auf diese Abfrage erstellt der WMI-Anbieter für Serverereignisse die entsprechende Ereignisbenachrichtigung in der Zieldatenbank:

USE AdventureWorks2022;
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

In diesem Beispiel SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 handelt es sich um einen Transact-SQL-Bezeichner, der aus dem Präfix SQLWEP_ und einer GUID besteht. SQLWEP erstellt eine neue GUID für jeden Bezeichner. Der Wert A7E5521A-1CA6-4741-865D-826F804E5135 in der TO SERVICE Klausel ist die GUID, die die Brokerinstanz in der msdb Datenbank identifiziert.

Weitere Informationen zur Arbeit mit WQL finden Sie unter Verwenden von WQL mit dem WMI-Anbieter für Serverereignisse.

Verwaltungsanwendungen leiten den WMI-Anbieter für Serverereignisse an eine Instanz von SQL Server durch Herstellen einer Verbindung mit einem WMI-Namespace, der vom Anbieter definiert wird. Der Windows-WMI-Dienst ordnet diesen Namespace der Anbieter-DLL sqlwep.dllzu und lädt ihn in den Arbeitsspeicher. Der Anbieter verwaltet einen WMI-Namespace für Serverereignisse für jede Instanz von SQL Server, und das Format ist \\.\<root>\Microsoft\SqlServer\ServerEvents\<instance_name>, wobei <instance_name> standardmäßig MSSQLSERVER. Weitere Informationen zum Herstellen einer Verbindung mit einem WMI-Namespace für eine Instanz von SQL Server finden Sie unter Verwenden von WQL mit dem WMI-Anbieter für Serverereignisse.

Die Anbieter-DLL wird sqlwep.dllnur einmal in den WMI-Hostdienst des Betriebssystems des Servers geladen, unabhängig davon, wie viele Instanzen von SQL Server sich auf dem Server befinden.

Ein Beispiel für eine SQL Server-Agent-Verwaltungsanwendung, die den WMI-Anbieter für Serverereignisse verwendet, finden Sie unter Beispiel: Erstellen einer SQL Server-Agent Warnung mit dem WMI-Anbieter. Ein Beispiel für eine Verwaltungsanwendung, die den WMI-Anbieter für Serverereignisse in verwaltetem Code verwendet, finden Sie unter Beispiel: Verwenden des WMI-Ereignisanbieters mit .NET Framework. Weitere Informationen finden Sie auch über WMI im Microsoft .NET Framework SDK.