服务器事件的WMI提供程序允许你使用Windows管理规范(WMI)来监控SQL Server中的事件。 提供程序的工作原理是将 SQL Server 转换为托管 WMI 对象。 WMI 可以使用此提供程序利用任何可以在 SQL Server 中生成事件通知的事件。 此外,作为与 WMI 交互的管理应用程序,SQL Server 代理可以响应这些事件,从而在早期版本中增加 SQL Server 代理涵盖的事件范围。
管理应用程序(如 SQL Server 代理)可以通过发出 WMI 查询语言(WQL)语句,使用 WMI Provider for Server 事件访问 SQL Server 事件。 WQL 是结构化查询语言(SQL)的简化子集,具有一些特定于 WMI 的扩展。 使用 WQL 时,应用程序针对特定数据库或数据库对象检索事件类型。 用于服务器事件的 WMI 提供程序将查询转换为事件通知,从而有效地在目标数据库中创建事件通知。 有关事件通知在 SQL Server 中的工作方式的详细信息,请参阅 WMI Provider for Server Events Concepts。 可查询的事件列在 WMI Provider for Server Events 类和属性中。
当发生触发事件通知以发送消息的事件时,该消息将转到名为 SQL/Notifications/ProcessWMIEventProviderNotification/v1.0 的 msdb 中的预定义目标服务。 该服务将事件放入名为 WMIEventProviderNotificationQueue 的 msdb 中的预定义队列中。 (服务与队列在首次连接到 SQL Server 时由提供程序动态创建。然后,提供程序从此队列中读取事件数据,并将其转换为托管对象格式(MOF),然后再将其返回到应用程序。 下图显示了此过程。
用于
例如,请考虑以下 WQL 查询:
SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks'
为了响应此查询,WMI Provider for Server Events 在目标数据库中创建等效的事件通知:
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是标识 msdb 数据库中的中转站实例的 GUID。
有关如何使用 WQL 的详细信息,请参阅 将 WQL 与用于服务器事件的 WMI 提供程序配合使用。
管理应用程序通过连接到提供程序定义的 WMI 命名空间,将 WMI Provider for Server 事件定向到 SQL Server 实例。 Windows WMI 服务将此命名空间映射到提供程序 DLL,Sqlwep.dll,并将其加载到内存中。 提供程序管理每个 SQL Server 实例的服务器事件的 WMI 命名空间,格式为:\.\root\Microsoft\SqlServer\ServerEvents\instance_name,其中 instance_name 默认为 MSSQLSERVER。 有关如何连接到 SQL Server 实例的 WMI 命名空间的详细信息,请参阅 将 WQL 与用于服务器事件的 WMI 提供程序配合使用。
提供程序 DLL(Sqlwep.dll)只加载到服务器的作系统的 WMI 主机服务中,而不考虑服务器上的 SQL Server 实例数。
有关使用 WMI Provider for Server 事件的 SQL Server 代理管理应用程序的示例,请参阅 示例:使用 WMI Provider for Server 事件创建 SQL Server 代理警报。 有关使用托管代码中用于服务器事件的 WMI 提供程序的管理应用程序的示例,请参阅 示例:在托管代码中使用 WMI 事件提供程序。 有关 Microsoft .NET Framework SDK 中的 WMI 的详细信息。