共用方式為


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

伺服器事件的 WMI 提供者可讓您使用 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 提供者中。

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

伺服器事件 WMI 提供者流程圖 伺服器

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

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks'

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

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

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

另請參閱

WMI 提供者的伺服器事件概念