Freigeben über


Grundlegendes zum WMI-Anbieter für Serverereignisse

Mit dem WMI-Anbieter für Serverereignisse können Sie die Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) verwenden, um Ereignisse in SQL Server zu ü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 der 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 datenbankobjekt ab. Der WMI-Anbieter für Serverereignisse übersetzt die Abfrage in eine Ereignisbenachrichtigung und erstellt effektiv eine Ereignisbenachrichtigung in der Zieldatenbank. Weitere Informationen dazu, wie Ereignisbenachrichtigungen in SQL Server funktionieren, finden Sie unter WMI-Anbieter für Serverereignissekonzepte. Die Ereignisse, die abgefragt werden können, werden im 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 , der sql/Notifications/ProcessWMIEventProviderNotification/v1.0 heißt. Der Dienst fügt das Ereignis in eine vordefinierte Warteschlange in msdb ein, die den Namen WMIEventProviderNotificationQueue hat. (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

Betrachten Sie beispielsweise die folgende WQL-Abfrage:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks'

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

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

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 zum Arbeiten 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.dll, zu 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 lautet: \\.\root\Microsoft\SqlServer\ServerEvents\instance_name, wobei instance_name Standardeinstellung für MSSQLSERVER ist. 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, Sqlwep.dll, wird nur 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 mithilfe des WMI-Anbieters für Serverereignisse. 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 in verwaltetem Code. Weitere Informationen finden Sie auch über WMI im Microsoft .NET Framework SDK.

Siehe auch

Konzepte des WMI-Anbieters für Serverereignisse