Sql server SQL Server代理作业失败时通知多个操作员

Sql server SQL Server代理作业失败时通知多个操作员,sql-server,sql-server-2008,alert,sql-server-agent,Sql Server,Sql Server 2008,Alert,Sql Server Agent,我在SQL Server 2008中有一个作业设置,当作业失败时,它会向一个操作员发送通知电子邮件 问题:是否可以为该特定作业设置发送给多个操作员的通知电子邮件 我相信一个可能的解决方法是为数据库针对每个给定的严重性创建大量警报,但我希望有一种更简洁的方法来做到这一点。如果我这样做,失败的作业可能会触发什么严重错误?(我不认为我会要求所有25人都做那样的事情) 是否可以通过sql命令添加更多操作员以在失败时通知?通过UI,您似乎只能选择一个操作员 问题:是否可以为该特定作业设置发送给多个操作员的

我在SQL Server 2008中有一个作业设置,当作业失败时,它会向一个操作员发送通知电子邮件

问题:是否可以为该特定作业设置发送给多个操作员的通知电子邮件

我相信一个可能的解决方法是为数据库针对每个给定的严重性创建大量警报,但我希望有一种更简洁的方法来做到这一点。如果我这样做,失败的作业可能会触发什么严重错误?(我不认为我会要求所有25人都做那样的事情)

是否可以通过sql命令添加更多操作员以在失败时通知?通过UI,您似乎只能选择一个操作员

问题:是否可以为该特定作业设置发送给多个操作员的通知电子邮件?

我认为这是不可能的

当然,看看
[msdb].[dbo].[sysjobs]
的结构,各种
操作符id
列都在这个表中,这将支持一对多是不可能的想法

但是有一些选择

  • 您可以使用以分号分隔的电子邮件地址列表创建一个新的操作员。查看
    sysoperators
    的定义,这对于可以放入
    nvarchar(100)
  • 如果您需要超过此限制,您可以在exchange或其他任何网站上建立电子邮件分发组

  • 如果目的是在作业失败时通知组织中的多个人员,则可以通过用分号分隔每个邮箱来更改操作员的电子邮件地址,以包括多个邮箱

    我假设您通知的操作员被称为JobWatcher:

    EXECUTE msdb.dbo.sp_update_operator
      @name = N'JobWatcher',
      @email_address = N'person1@company.org;person2@company.org';
    

    现在person1@company.org及person2@company.org作业失败时将接收邮件。

    最佳做法是在邮件服务器上创建一个组,向该组发送通知,然后控制来自邮件服务器的收件人数量。

    我使用的最简单方法是在
    上通知多个
    “操作员”
    “作业失败”是指:


    SSMS>SQL Server Agent>Operators
    中创建一个新的
    OPERATOR
    编辑现有的
    ,并在
    中添加以
    分隔的其他电子邮件地址;
    “电子邮件名称:“
    box.

    如果目的是在工作失败时通知组织中的多个人员,并在成功时通知另一组多个人员,那么这就是我提出的解决方法

    您会注意到,步骤1-3是计划作业使用的正常任务,就像您对任务所做的一样。在这些步骤之前,可以根据需要执行任意多个步骤,但流程的最后一步(步骤3)需要打破“成功时”和“失败时”这两个步骤,以分别发送电子邮件。此外,所有“失败”都需要继续发送“失败电子邮件”,如下所示。因此,失败小组收到了这些电子邮件,而根据历史记录,这项工作仍将失败

    您将在作业步骤的“高级”选项卡中看到更改“成功时操作”和“失败时操作”方向的选项

    失败电子邮件步骤-常规属性

    失败电子邮件步骤-高级属性

    成功电子邮件步骤-常规属性

    成功电子邮件步骤-高级属性


    对于其他需要帮助的人

    请使用下面的脚本增加电子邮件地址的字符长度。
    
    使用mdsdb
    去
    ALTER表系统运算符
    更改列电子邮件地址NVARCHAR(2000年);
    

    IIRC如果对你有好处的话,你可以用多个电子邮件地址定义单个操作员?不,我有,但问题是你只能在作业的通知部分选择一个操作员。是的,我认为没有办法做你想做的事。当我想提醒多个人的时候,我刚刚设置了一个新的操作员
    [msdb].[dbo].[sysjobs]
    有用于
    操作员id
    的列,而不是在一个单独的表中,该表支持1对多。好的,我可以试试看它是否有效,我第一次误读了你的评论,很抱歉,我不知道你可以添加多个地址,这是一个非常简单的解决方案,谢谢!如果你把它写下来作为一个答案,我可以把它标记为答案。这就是我们在我工作的地方是如何做的。假设您的所有管理员都是名为DBA的Outlook通讯组的一部分。您将创建一个名为“DBA”的代理操作员,其电子邮件地址为DBAs@company.org'通知通讯组中的每个人。这是正确的,尽管有人已经声明该字段只允许100个字符,很快就会填满多个地址。@MarkHedley这是一个短期解决方案,但是,如果您很难更改邮件服务器上的组,它可能仍然有用。我试图更新答案,但刚才出错也是如此。我稍后再试。谢谢你的反馈!100个字符问题的一个令人讨厌的副产品是,它可以让你输入超过100个字符,但当你点击OK后,它就被切断了!我们在使用我工作的电子邮件组方法(Exchange通讯组列表),直到我们的DLs安全策略在Exchange端更改为“要求所有发件人都经过身份验证”。对单个电子邮件地址的通知仍然有效,因此这是一个方便的(希望是暂时的)解决方法。不过,100个字符并不是完全失去了空间。为了给大家一个想法,只有3个电子邮件地址使我们的字符数达到56个。请参阅下面的答案,如果这是真的,请删除此答案,执行msdb.dbo.sp_update_operator@email_address=N'person1@company.org;person2@company.org';@这与下面的答案相同。“不可能”指的是多个操作员而不是多个电子邮件地址