sp_add_alert (Transact-SQL)

创建一个警报。

主题链接图标Transact-SQL 语法约定

语法

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

参数

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

  • [ @message_id = ] message_id
    定义警报的消息错误号。(它通常与 sysmessages 表中的错误号相对应。)message_id 的数据类型为 int,默认值为 0。如果使用了 severity 来定义警报,则 message_id 必须为 0 或 NULL。

    注意注意

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

  • [ @severity = ] severity
    定义警报的严重级别(从 125)。如果存储在 sysmessages 表中且发送到 Microsoft Windows 应用程序日志的任何 SQL Server 消息具有所指示的严重级别,则会导致发送警报。severity 的数据类型为 int,默认值为 0。如果使用 message_id 定义警报,则 severity 必须为 0

  • [ @enabled =] enabled
    指示警报的当前状态。enabled 的数据类型为 tinyint,默认值为 1(启用)。如果该值为 0,则不启用且不触发警报。

  • [ @delay_between_responses = ] delay_between_responses
    警报响应之间的等待间隔(以秒为单位)。delay_between_responses 的数据类型为 int,默认值为 0,这意味着响应之间不等待(每次出现警报时都生成响应)。响应可以为下面的一种或两种形式:

    • 通过电子邮件或寻呼发送的一个或多个通知。

    • 要执行的作业。

    例如,当警报在短时间内重复产生时,通过设置该值就有可能避免发送重复的电子邮件。

  • [ @notification_message = ] '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 逻辑运算符连接)。

    重要说明重要提示

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

    说明

    0(默认值)

    1

    电子邮件

    2

    寻呼机

    4

    net send

  • [ @database_name =] 'database'
    只有其中出现错误时才能触发警报的数据库。如果未提供 database,则会激发警报,而无论错误出现在什么位置。database 的数据类型为 sysname。不允许用方括号 ([ ]) 将名称括起来。默认值为 NULL。

  • [ @event_description_keyword = ] 'event_description_keyword_pattern'
    SQL Server 错误说明必须与之类似的字符序列。可以使用 Transact-SQL LIKE 表达式模式匹配字符。event_description_keyword_pattern 的数据类型为 nvarchar(100),默认值为 NULL。对于筛选对象名称(例如 %customer_table%)来说,此参数非常有用。

  • [ @job_id = ] job_id
    为响应该警报而运行的作业的标识号。job_id 的数据类型为 uniqueidentifier,默认值为 NULL。

  • [ @job_name = ] '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 = ] 'performance_condition'
    用格式 itemcomparatorvalue 表示的值。performance_condition 的数据类型为 nvarchar(512),默认值为 NULL,它由下列元素组成。

    格式元素

    说明

    Item

    性能对象、性能计数器或计数器的命名实例

    Comparator

    下列运算符之一:>、< 或 =

    Value

    计数器的数值

  • [ @category_name =] 'category'
    警报类别的名称。category 的数据类型为 sysname,默认值为 NULL。

  • [ @wmi_namespace= ] 'wmi_namespace'
    用于查询事件的 WMI 命名空间。wmi_namespace 的数据类型为 sysname,默认值为 NULL。只支持本地服务器上的命名空间。

  • [ @wmi_query= ] 'wmi_query'
    用于指定警报的 WMI 事件的查询。wmi_query 的数据类型为 nvarchar(512),默认值为 NULL。

返回代码值

0(成功)或 1(失败)

结果集

注释

sp_add_alert 必须从 msdb 数据库运行。

在下列情况下,SQL Server 和 SQL Server 应用程序产生的错误/消息将发送到 Windows 应用程序日志,并因此引发警报:

  • 严重级别为 19 或更高的 sysmessages 错误

  • 任何使用 WITH LOG 语法调用的 RAISERROR 语句

  • 所有使用 sp_altermessage 修改或创建的 sysmessages 错误

  • 所有使用 xp_logevent 记录的日志事件

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

如果一个警报没有正常工作,请检查:

  • SQL Server Agent 服务是否正在运行。

  • 事件是否出现在 Windows 应用程序日志中。

  • 警报是否已被启用。

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

权限

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

示例

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

注意注意

此示例假定消息 55001 和 Back up the AdventureWorks 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 AdventureWorks Database' ;
GO