Share via


了解伺服器事件的 WMI 提供者

適用於:SQL Server

WMI Provider for Server Events 可讓您使用 Windows Management Instrumentation (WMI) 在 SQL Server 中監視事件。 提供者的運作方式是將 SQL Server 轉換成受控 WMI 物件。 任何可在 SQL Server 中產生事件通知的事件,都可以由 WMI 使用此提供者來利用。 此外,作為與 WMI 互動的管理應用程式,SQL Server Agent 可以回應這些事件,增加 SQL Server Agent 在舊版中涵蓋的事件範圍。

SQL Server Agent 之類的管理應用程式可以藉由發出 WMI 查詢語言 (WQL) 語句,使用伺服器事件的 WMI 提供者來存取 SQL Server 事件。 WQL 是結構化查詢語言 (SQL) 的簡化子集,具有一些 WMI 特定的擴充功能。 在使用 WQL 時,應用程式會針對特定資料庫或資料庫物件擷取事件類型。 伺服器事件的 WMI 提供者會將查詢轉譯成事件通知,有效地在目標資料庫中建立事件通知。 如需有關事件通知在 SQL Server 中運作方式的詳細資訊,請參閱 伺服器事件的 WMI 提供者概念。 可以查詢的事件會列在 WMI Provider for Server Events 類別和屬性

當觸發事件通知傳送訊息的事件發生時,訊息會移至名為SQL/Notifications/ProcessWMIEventProviderNotification/v1.0msdb預先定義目標服務。 服務會將事件放入名為WMIEventProviderNotificationQueuemsdb預先定義佇列中。 (當提供者第一次連線到 SQL Server 時,服務與佇列都會動態建立。提供者接著會從這個佇列讀取事件數據,並將它轉換成 Managed 物件格式 (MOF),然後再將它傳回應用程式。 下圖顯示這項程序。

Flow diagram of the WMI Provider for Server Events.

例如,請考慮下列 WQL 查詢:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2022';

為了回應此查詢,伺服器事件的 WMI 提供者會在目標資料庫中建立對等的事件通知:

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

在此範例中, SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 是由前置 SQLWEP_ 詞和 GUID 所組成的 Transact-SQL 識別符。 SQLWEP 會為每個標識碼建立新的 GUID。 子句中的TO SERVICEA7E5521A-1CA6-4741-865D-826F804E5135是 GUID,可識別資料庫中的 msdb Broker 實例。

如需如何使用 WQL 的詳細資訊,請參閱 搭配伺服器事件的 WMI 提供者使用 WQL。

管理應用程式會連線至提供者所定義的 WMI 命名空間,將伺服器事件的 WMI 提供者導向 SQL Server 實例。 Windows WMI 服務會將此命名空間對應至提供者 DLL, sqlwep.dll並將它載入記憶體中。 提供者會針對每個 SQL Server 實體管理伺服器事件的 WMI 命名空間,格式為 \\.\<root>\Microsoft\SqlServer\ServerEvents\<instance_name>,其 <instance_name> 預設為 MSSQLSERVER。 如需如何連線到 SQL Server 實例之 WMI 命名空間的詳細資訊,請參閱 搭配使用 WQL 與伺服器事件的 WMI 提供者。

不論伺服器上有多少 SQL Server 實例,提供者 DLL sqlwep.dll只會載入伺服器作業系統的 WMI 主機服務一次。

如需使用 WMI Provider for Server 事件的 SQL Server Agent 管理應用程式的範例,請參閱 範例:使用 WMI 提供者建立 SQL Server Agent 警示。 如需在 Managed 程式代碼中使用 WMI 提供者伺服器事件的管理應用程式範例,請參閱 範例:搭配 .NET Framework 使用 WMI 事件提供者。 Microsoft .NET Framework SDK 中也提供 WMI 的詳細資訊。