Grundlegendes zum WMI-Anbieter für Serverereignisse
Über den WMI-Anbieter für Serverereignisse können Sie Ereignisse in SQL Server mithilfe von WMI (Windows Management Instrumentation) überwachen. Der Anbieter wandelt SQL Server in ein verwaltetes WMI-Objekt um. Jedes Ereignis, das eine Ereignisbenachrichtigung in SQL Server generieren kann, kann mithilfe dieses Anbieters von WMI verwendet werden. Darüber hinaus kann der SQL Server-Agent als eine mit WMI interagierende Verwaltungsanwendung auf diese Ereignisse reagieren. Dadurch wird der durch den SQL Server-Agent abgedeckte Ereignisbereich im Gegensatz zu früheren Versionen erweitert.
Verwaltungsanwendungen wie der SQL Server-Agent können über den WMI-Anbieter für Serverereignisse auf SQL Server zugreifen, indem sie WQL-Anweisungen (WMI Query Language) ausgeben. 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 darüber, wie Ereignisbenachrichtigungen in SQL Server funktionieren, finden Sie unter Ereignisbenachrichtigung (Datenbankmodul). Die Ereignisse, die abgefragt werden können, sind in Klassen und Eigenschaften für WMI-Anbieter für Serverereignisse aufgelistet.
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 vom Anbieter beim Herstellen der ersten Verbindung mit SQL Server dynamisch erstellt.) Der Anbieter liest die Ereignisdaten aus dieser Warteschlange, wandelt sie in MOF-Daten (Managed Object Format) um und gibt sie dann an die Anwendung zurück. 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 SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 ein Transact-SQL-Bezeichner, der aus dem Präfix SQLWEP_ und einem GUID besteht. SQLWEP erstellt einen neuen 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 über die Arbeit mit WQL finden Sie unter Verwenden von WQL mit dem WMI-Anbieter für Serverereignisse.
Verwaltungsanwendungen verweisen den WMI-Anbieter für Serverereignisse an eine Instanz von SQL Server, indem sie eine Verbindung zu 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 für jede Instanz von SQL Server einen WMI-Namespace für Serverereignisse, und das Format ist: \\.\Stamm\Microsoft\SqlServer\ServerEvents\Instanzname. Dabei gilt Instanzname lautet standardmäßig MSSQLSERVER. Weitere Informationen darüber, wie eine Verbindung zu einem WMI-Namespace für eine Instanz von SQL Server hergestellt wird, finden Sie unter Verwenden des WMI-Anbieters für Serverereignisse.
Die Anbieter-DLL, Sqlwep.dll, wird nur einmal in den WMI-Hostdienst des Serverbetriebssystems geladen, dabei ist es irrelevant, 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 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 mit .NET Framework. Weitere Informationen über WMI sind zudem in Microsoft.NET Framework SDK verfügbar.