sp_add_alert (Transact-SQL)
适用范围:SQL Server
创建一个警报。
语法
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 必须是 0
或 NULL
。
只有 sysmessages
写入Microsoft Windows 应用程序日志的错误才会发送警报。
[ @severity = ] 严重性
定义警报的严重性级别(从 1
此 25
级别)。 @severity为 int,默认值为 0
. 发送到 Windows 应用程序日志的 sysmessages
表中存储的任何 SQL Server 消息具有指示的严重性会导致发送警报。 如果使用@message_id来定义警报,则必须@severity0
。
[ @enabled = ] enabled
指示警报的当前状态。 @enabled 为 tinyint,默认值 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_condition 为 nvarchar(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_name 为master
或NULL
, 否则不会触发警报。
权限
默认情况下,只有 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