创建 WMI 事件警报

适用于:SQL ServerAzure SQL 托管实例

重要

Azure SQL 托管实例目前支持大多数(但不是所有)SQL Server 代理功能。 有关详细信息,请参阅 Azure SQL 托管实例与 SQL Server 的 T-SQL 区别

本文说明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中创建 SQL Server 代理警报,以便在出现由 WMI Provider for Server Events 监视的特定 SQL Server 事件时触发警报。

有关使用 WMI 提供程序监视 SQL Server 事件的详细信息,请参阅 WMI Provider for Server Events 类和属性。 有关接收 WMI 事件警报通知的所需权限的信息,请参阅 为 SQL Server 代理服务选择帐户。 有关 WQL 的详细信息,请参阅 将 WQL 与 WMI Provider for Server Events 结合使用

限制和局限

  • SQL Server Management Studio 提供了一种易用的图形方式来管理整个警报系统,这也是配置警报基础结构的推荐方式。

  • xp_logevent 生成的事件在 master 数据库中发生。 因此,除非警报的 @database_name'master' 或 NULL,否则 xp_logevent 不触发警报。

  • 仅支持运行 SQL Server 代理的计算机上的 WMI 命名空间。

权限

默认情况下,只有 sysadmin 固定服务器角色的成员才能执行 sp_add_alert

使用 SQL Server Management Studio

  1. 在“对象资源管理器”中,选择加号以展开要创建 WMI 事件警报的服务器。

  2. 单击加号以展开“SQL Server 代理”。

  3. 右键单击“警报”并选择“新建警报”

  4. “新建警报” 对话框的 “名称” 框中,输入此警报的名称。

  5. 选中 “启用” 复选框将运行警报。 默认情况下, “启用” 为选中状态。

  6. “类型” 列表中,选择 “WMI 事件警报”

  7. 在“WMI 事件警报定义”下的“命名空间”框中,为标识触发该警报的 WMI 事件的 WMI 查询语言 (WQL) 语句指定 WMI 命名空间。

  8. “查询” 框中,指定标识该警报所响应事件的 WQL 语句。

  9. 选择“确定”。

使用 Transact-SQL

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    USE msdb;
    GO
    
    EXEC dbo.sp_add_alert @name = N'Test Alert 2',
        @message_id = 54001,
        @notification_message = N'Error 54001 has occurred on the Sales.SalesOrderDetail table on the AdventureWorks2022 database.',
        @wmi_namespace = '\.\root\Microsoft\SqlServer\ServerEvents',
        @wmi_query = N'SELECT * FROM ALTER_TABLE
    WHERE DatabaseName = ''AdventureWorks2022'' AND SchemaName = ''Sales''
    AND ObjectType=''Table'' AND ObjectName = ''SalesOrderDetail''';
    GO
    

后续步骤