Grundlegendes zum WMI-Anbieter für Serverereignisse
Mit dem WMI-Anbieter für Serverereignisse können Sie die Windows-Verwaltungsinstrumentation (WMI) verwenden, um Ereignisse in SQL Server zu überwachen. Der Anbieter funktioniert, indem er SQL Server in ein verwaltetes WMI-Objekt verwandelt. Jedes Ereignis, das eine Ereignisbenachrichtigung in SQL Server generieren kann, kann vom WMI mithilfe dieses Anbieters genutzt werden. Darüber hinaus können SQL Server-Agent als Verwaltungsanwendung, die mit dem WMI interagiert, auf diese Ereignisse reagieren und den Umfang der von SQL Server-Agent abgedeckten Ereignisse gegenüber früheren Releases erhöhen.
Verwaltungsanwendungen wie SQL Server-Agent können mithilfe des WMI-Anbieters für Serverereignisse auf SQL Server Ereignisse zugreifen, indem WMI Query Language (WQL)-Anweisungen ausgegeben werden. 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 zur Funktionsweise von Ereignisbenachrichtigungen in SQL Server finden Sie unter WMI-Anbieter für Serverereignissekonzepte. Die Ereignisse, die abgefragt werden können, sind in Klassen und Eigenschaften für WMI-Anbieter für Serverereignisseaufgelistet.
Wenn ein Ereignis auftritt, das die Ereignisbenachrichtigungsfunktion zum Senden einer Meldung veranlasst, wird die Benachrichtigung an einen vordefinierten Zieldienst in msdb mit dem Namen SQL/Notifications/ProcessWMIEventProviderNotification/v1.0übermittelt. Der Zieldienst fügt das Ereignis in eine vordefinierte Warteschlange in msdb ein. Ihr Name ist WMIEventProviderNotificationQueue. (Sowohl der Dienst als auch die Warteschlange werden dynamisch vom Anbieter erstellt, wenn er zum ersten Mal eine Verbindung mit SQL Server herstellt.) Der Anbieter liest dann die Ereignisdaten aus dieser Warteschlange und transformiert sie in das MoF-Format (Managed Object Format), bevor er sie an die Anwendung zurückgibt. Die folgende Abbildung veranschaulicht diesen Prozess.
Betrachten Sie beispielsweise 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 ist ein Transact-SQL-Bezeichner, SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9
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 der GUID, der die Broker-Instanz 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 instance von SQL Server weiter, indem sie eine Verbindung mit einem vom Anbieter definierten WMI-Namespace herstellen. Der WMI-Dienst ordnet der Anbieter-DLL Sqlwep.dll diesen Namespace zu und lädt sie in den Arbeitsspeicher. Der Anbieter verwaltet einen WMI-Namespace für Serverereignisse für jede instance von SQL Server, und das Format lautet: \\.\root\Microsoft\SqlServer\ServerEvents\instance_name, wobei instance_name standardmäßig AUF MSSQLSERVER festgelegt ist. Weitere Informationen zum Herstellen einer Verbindung mit einem WMI-Namespace für eine instance 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 zu WMI finden Sie auch im Microsoft .NET Framework SDK.