了解伺服器事件的 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 提供者存取SQL Server事件,方法是發出 WMI 查詢語言 (WQL) 語句。 WQL 是結構化查詢語言 (SQL) 的簡化子集,具有一些 WMI 特定的延伸模組。 在使用 WQL 時,應用程式會針對特定的資料庫或資料庫物件來擷取事件類型。 伺服器事件的 WMI 提供者會將查詢轉譯為事件通知,以便在目標資料庫中有效地建立事件通知。 如需事件通知在 SQL Server 中運作方式的詳細資訊,請參閱伺服器事件概念的 WMI 提供者。 可查詢的事件會列在 伺服器事件類別和屬性的 WMI 提供者中。
當觸發事件通知傳送訊息的事件發生時,訊息會移至 msdb 中名為 SQL/Notifications/ProcessWMIEventProviderNotification/v1.0的預先定義目標服務。 服務會將事件放入名為WMIEventProviderNotificationQueue的msdb中預先定義的佇列。 (當提供者第一次連線至 SQL Server.) 提供者時會動態建立服務與佇列,然後從此佇列讀取事件資料,並將它轉換成 Managed 物件格式, (MOF) ,再將它傳回應用程式。 下圖顯示這項程序。
伺服器伺服器
例如,請考慮使用下列 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 SERVICE
值 A7E5521A-1CA6-4741-865D-826F804E5135
是 GUID,可識別msdb資料庫中的訊息代理程式實例。
如需如何使用 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 的詳細資訊。