sp_add_alert (Transact-SQL)

适用范围:SQL Server

创建一个警报。

Transact-SQL 语法约定

语法

sp_add_alert [ @name = ] N'name'
     [ , [ @message_id = ] message_id ]
     [ , [ @severity = ] severity ]
     [ , [ @enabled = ] enabled ]
     [ , [ @delay_between_responses = ] delay_between_responses ]
     [ , [ @notification_message = ] N'notification_message' ]
     [ , [ @include_event_description_in = ] include_event_description_in ]
     [ , [ @database_name = ] N'database_name' ]
     [ , [ @event_description_keyword = ] N'event_description_keyword' ]
     [ , { [ @job_id = ] job_id | [ @job_name = ] N'job_name' } ]
     [ , [ @raise_snmp_trap = ] raise_snmp_trap ]
     [ , [ @performance_condition = ] N'performance_condition' ]
     [ , [ @category_name = ] N'category_name' ]
     [ , [ @wmi_namespace = ] N'wmi_namespace' ]
     [ , [ @wmi_query = ] N'wmi_query' ]
[ ; ]

参数

[ @name = ] N'name'

警报的名称。 该名称显示在为响应警报而发送的电子邮件或寻呼消息中。 它必须是唯一的,并且可以包含百分比(%) 字符。 @name为 sysname,无默认值。

[ @message_id = ] message_id

定义警报的消息错误消息。 (它通常对应于表中的错误号sysmessages@message_id为 int,默认值为 0. 如果使用 @severity 来定义警报, 则@message_id 必须是 0NULL

只有 sysmessages 写入Microsoft Windows 应用程序日志的错误才会发送警报。

[ @severity = ] 严重性

定义警报的严重性级别(从 125级别)。 @severity为 int,默认值为 0. 发送到 Windows 应用程序日志的 sysmessages 表中存储的任何 SQL Server 消息具有指示的严重性会导致发送警报。 如果使用@message_id来定义警报,则必须@severity0

[ @enabled = ] enabled

指示警报的当前状态。 @enabledtinyint,默认值 1 为 (已启用)。 如果 0启用警报,则不会触发警报。

[ @delay_between_responses = ] delay_between_responses

警报响应之间的等待间隔(以秒为单位)。 @delay_between_responses是 int,默认值0为,这意味着响应之间没有等待(警报的每个匹配项都会生成响应)。 响应可以为下面的一种或两种形式:

  • 通过电子邮件或寻呼程序发送的一个或多个通知
  • 要执行的作业

通过设置此值,可以阻止在短时间内重复发生警报时发送不需要的电子邮件。

[ @notification_message = ] N'notification_message'

作为电子邮件或 net send寻呼通知的一部分发送到操作员的可选附加邮件。 @notification_message为 nvarchar(512),默认值为 NULL. 指定 @notification_message 对于添加特殊说明(如修正过程)非常有用。

[ @include_event_description_in = ] include_event_description_in

是否应将 SQL Server 错误的说明作为通知消息的一部分包含在内。 @include_event_description_in为 tinyint,默认值为 5 (电子邮件)net send,并且可以将其中一个或多个值与OR逻辑运算符结合使用。

重要

在 SQL Server 的未来版本中,将从SQL Server 代理中删除 Pager 和net send选项。 请避免在新的开发工作中使用这些功能,并考虑修改当前使用这些功能的应用程序。

说明
0
1 电子邮件
2 寻呼机
4 net send

[ @database_name = ] N'database_name'

只有其中出现错误时才能触发警报的数据库。 如果未 提供@database_name ,则无论发生错误的位置如何,警报都会触发。 @database_name为 sysname,默认值为 NULL. 不允许括在括号 ([ ]) 中的名称。

[ @event_description_keyword = ] N'event_description_keyword'

必须在错误消息日志中 SQL Server 错误的说明中找到的字符序列。 @event_description_keyword为 nvarchar(100),默认值为 NULL. 此参数可用于筛选对象名称(例如 customer_table)。

注意

不能使用 Transact-SQL LIKE 表达式模式匹配字符。

[ @job_id = ] job_id

为响应该警报而运行的作业的标识号。 @job_id是 uniqueidentifier,默认值为 NULL.

必须指定@job_id@job_name,但不能指定这两者。

[ @job_name = ] N'job_name'

为响应该警报而执行的作业的名称。 @job_name为 sysname,默认值为 NULL.

必须指定@job_id@job_name,但不能指定这两者。

[ @raise_snmp_trap = ] raise_snmp_trap

未在 SQL Server 版本 7.0 中实现。 @raise_snmp_trap为 tinyint,默认值为 0.

[ @performance_condition = ] N'performance_condition'

以“ItemComparatorValue格式表示的值。 @performance_conditionnvarchar(512),默认值 NULL为 ,由这些元素组成。

格式元素 说明
项目 性能对象、性能计数器或计数器的命名实例。
比较仪 以下运算符之一:>、或<=
计数器的数值。

[ @category_name = ] N'category_name'

警报类别的名称。 @category_name为 sysname,默认值为 NULL.

[ @wmi_namespace = ] N'wmi_namespace'

用于查询事件的 WMI 命名空间。 @wmi_namespace为 sysname,默认值为 NULL. 只支持本地服务器上的命名空间。

[ @wmi_query = ] N'wmi_query'

用于指定警报的 WMI 事件的查询。 @wmi_query为 nvarchar(512),默认值为 NULL.

返回代码值

0(成功)或 1(失败)。

结果集

无。

注解

sp_add_alert 必须从 msdb 数据库运行。

以下是 SQL Server 和 SQL Server 应用程序生成的错误/消息发送到 Windows 应用程序日志的情况,因此可以引发警报:

  • 严重性 19 或更高版本 sys.messages 错误
  • 使用WITH LOG语法调用的任何RAISERROR语句
  • 使用 修改或创建的任何 sys.messages 错误 sp_altermessage
  • 使用 xp_logevent

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

如果警报无法正常工作,请检查以下情况:

  • SQL Server 代理服务正在运行

  • 事件显示在 Windows 应用程序日志中

  • 已启用警报

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

权限

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

示例

以下示例在触发警报时添加一个运行 Back up the AdventureWorks2022 Database 作业的警报(测试警报)。

注意

此示例假定消息 55001 和 Back up the AdventureWorks2022 Database 作业已存在。 此示例只用于说明用途。

USE msdb;
GO

EXEC dbo.sp_add_alert
    @name = N'Test Alert',
    @message_id = 55001,
    @severity = 0,
    @notification_message = N'Error 55001 has occurred. The database will be backed up...',
    @job_name = N'Back up the AdventureWorks2022 Database';
GO