SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。


如我们在这个系列的文章里所见,SQL Server代理作业由一些列的作业步骤组成,每个步骤是需要执行的不同类型工作。另外在每个步骤里要进行的工作,你会发送特定作业成功或失败的消息给DBA(或其他人) 。当系统发生故障时,特定性能问题发生或某个阀值达到系统值时,你也会对这些消息感兴趣。SQL Server代理提供创建警报的能力,可以发消息给指定的操作员作为提胸,来帮助你处理这些问题。

什么是SQL Server代理警报?

SQL Server警报是在你的SQL Server系统上,对特定条件的自动响应。警报可以由下列条件触发:

  • SQL Server系统信息生成
  • 最低程度的系统错误侦测到
  • 在SQL Server性能计数器达到特定阀值
  • 符合WMI查询结果

一旦警报触发,在警报里定义的响应会发生。这些响应要么执行特定的SQL Server代理作业,要么通知一个或多个操作员。你也有可以指定触发错误信息的选项,包括在任何发送的提醒里。

什么是SQL Server代理操作员?

SQL Server代理操作可以是简单的一个邮箱地址。也有其他选项,例如一个net send地址或一个“寻呼机”邮件名,但事实上“寻呼机”选项直接作为邮件发送。

备注:

对于SQL Server警报,”Net Send“还是个选项,但实际上这个功能并不用,已经正式从产品里剥离,意味着在后续的SQL Server版本里移除。对于警报唯一可行的选项是通过邮件提醒。

当一个操作员被定义,你可以使用操作员来接收邮件(例如通过邮件发送文本信息)到定义的邮件别名。那个邮件别名会可能是一组或更多为系统问题待命的DBA。对于重要的提醒,你会想要使用升级的操作员,例如直接发短信给手机。

创建一个操作员

创建一个操作员,打开SSMS,在SQL Server代理文件夹下找到操作员。右击【操作员】,选择【新建操作员】,你会打开如插图1的界面。

插图1——新建操作员对话框

如你在插图1所见,我对操作员已指定了一个姓名,还有邮件地址。请确保已启用已经选择,不然对这个操作员的任何警报都不会发生。

当你选择了【通知】页,我们可以看到已经分配给这个操作员的警报列表。对新建的操作员,如插图2所示,列表是空的。点击【确定】,操作员已经创建。

插图2——新建操作员通知页

在运行的系统上,我们会期望至少存在2个操作员——一个作为紧急系统提醒(例如,我们刚定义的服务器警报操作员),另一个在SQL Server代理作业或常规错误上你会有的各自分工。

操作员当然也可以通过T-SQL脚本来创建。你可以使用sp_add_operator系统存储过程来创建操作员。语法上的帮助,可以参考在线帮助:https://msdn.microsoft.com/zh-cn/library/ms186747.aspx

备注:

关于操作员一个常见的问题是你如何发送警报给多个人。你实现这个的方法是通过你的邮件系统的邮件发布列表,因为SQL Server代理只能给单个操作员发送警报。因此你在SQL Server代理可以定义操作员为发布列表,那么在列表上的每个人都会收到相关的警报。

防故障(Fail-Safe)操作员

防故障操作员定义为:如果所有其他操作员提醒失败而启用的。这样的失败有很多的可能(例如,你邮件系统出问题了,这个在下篇文章我们会谈到),但在任何情况下有一个防故障操作员比较好。一旦你定义一个或多个操作员,你就定义防故障操作员。防故障操作员是你指定的最后一个联系的。

你在SQL Server代理属性对话框里定义防故障安全员(右击SQL Server代理,选择属性),在警报系统页。勾选启用防故障操作员,然后从列表里选择系统已经定义的操作员,如插图3所示。当完成选择后,点击【确定】。注意这页的其它选项会在下一篇的数据库邮件里谈到。

插图3——配置防故障操作员

创建警报

一些就绪,现在我们可以开始创建警报,我们刚才已经提过,是在你的SQL Server系统里对于一些情况的自动响应。为了定义一个新的警报,在SSMS里点击SQL Server代理文件夹,然后点击【警报】文件夹,右击并选择【新建警报】打开新建警报对话框。你会看到如插图4的对话框。对于在系统上的第一个警报,我们创建一个提醒DBA任何系统错误的警报(严重级别19或更高)。

插图4——创建新的警报

SQL Server事件警报

和操作员一样,警报必须启用才会工作。注意在这个例子里,警报的”类型“是”SQL Server事件警报“。你也可以选择”SQL Server 性能条件警报“,它会提供对于关联的SQL Server实例,会看到很多SQL Server特定的性能计数器。在下一部分,我们会看到一个性能条件警报。最后,还有一个”WMI事件警报“,允许你写WMI查询并用警报响应它们。关于WMI你可以在在线帮助里进一步学习:https://msdn.microsoft.com/en-us/library/aa394582%28v=VS.85%29.aspx

在新建警报对话框里的下拉框里的严重级别只是对于SQL Server所有可能错误的可用严重级别(查看RAISERROR命令文档来了解更多:https://msdn.microsoft.com/zh-cn/library/ms178592.aspx)这些在19或更高级别的错误,需要DBA干预调查为什么会发生这个级别的错误。

一旦你选择了如插图4所示界面的选项,点击【响应】来查看对这个警报可以采取的行动(如插图5所示)。你会可能到你可以执行一个SQL Server代理作业,或通知一个操作员(例如,我们刚才定义的操作员)。在这个例子里,我们选择给我们的”服务器警报“发送一个邮件,当警报发生的时候。

插图5——新建警报响应

选择想要的操作员后,你可以切换到【选项】页看下对一个这个警报一些有趣的选择,如插图6所示。选择包含警告信息的选项,如果你想知道为什么这个警报被发送(不然的话很难理解警报为什么会发送)。这个页面也允许你指定额外的提醒信息,非常用于在早上3点提醒你,为什么你会因这个信息而醒来,或作为帮助的搜素字符,当查看来子SQL Server的邮件时。如果这个是普通的警报条件,你可以只选择默认提醒信息不需要额外你专有的备注。

延迟选项用来指定当警报触发时,是否需要重复提醒,可以指定几分钟或几秒。在这个例子里,5分钟的延迟已经设置,因此你的邮箱收件箱会持续收到一些列的邮件,所有都提示同样的问题。

插图6——新建报警选项

当你完成对这个对话框的选择,点击【确定】来创建新的警报。

当然你也可以通过sp_add_alert的系统存储过程来创建。关于这个存储过程的文档在这里:https://msdn.microsoft.com/zh-cn/library/ms189531.aspx或者直接从SSMS里创建,如插图7所示。

插图7——通过脚本新建一个警报

警报条款

有意思的是你可以指定特定的错误信息从不触发。为了定义这样的错误,你必须人为更新服务器上的注册表。注册表是你特定实例上的。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER下,你会找到SQLServerAgent,如插图8所示。

插图8:注册表编辑器配置NonAlertableErrors

默认情况下,错误号是1204(不能获得锁)和4002(登录失败)。如果你真的想要这些错误号的警报,你会需要编辑下这个键值,从列表里移除这些数字。相反的,你可以增加额外的从不警告错误号,你可以加这些错误号到列表。

当然,当你编辑注册表时,这些不正常的警告号你要特别仔细。

性能条件警报

警报的第2个类型是 SQL Server性能条件警报。你可以给予性能计数器配置很多种类的警报。遗憾的是,你只能设置SQL Server的计数器,但这已经能让你自动监控你的系统。例如,在插图9里,当AdvantureWorks数据库的事务日志超过90%满时,你后收到警告的警报。一但你选择如插图4的选项,点击【响应】页来配置对这个警报对应采取的行动(如插图5所示)。你会看到你可以执行SQL Server代理作业(例如刚才提到的日志空间增长,或开始备份数据库),或提醒对应的操作员(例如我们刚才定义的操作员)。在这个例子里,当警报触发的时候,我们选择给“服务器警报”操作发送邮件。

插图9:性能条件警报

警报系统进阶

除了这篇文章里创建的高严重级别的警报,你应该研究下警报的其他方面。在性能计数器和WMI查询上设置警报功能就非常强大。当然这里只限制SQL Server特定的计数器,没有例如CPU这样的系统计数器。这个要注意,你还是设置这样的警报,当SQL Server登录到特定的阈值,或达到SQL Server特定的内存条件,或当超过I/O阈值时。

另外,当警报触发时可以执行作业意味着你可以通过自动化操作修正很多常规错误,而不需要每次都人为干预错误发生。对于要执行的作业没有特定的要求:任何SQL Server代理作业都会被调用。

下篇预告

在所有的SQL Server系统中至少要配置一个操作员。这会保证对于大多数严重错误,一些特定的提醒会发给你的DBA团队。当然,发送邮件警报的话需要SQL Server能发送邮件警报,因此我们的下篇文章会专门谈如何配置数据库邮件。

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/72453/

SQL Server代理(3/12):代理警报和操作员的更多相关文章

  1. Nginx配置WebService、MySQL、SQL Server、ORACLE等代理

    首先介绍一下Nginx的基本使用: 注意不要直接双击nginx.exe,这样会导致修改配置后重启.停止nginx无效,需要手动关闭任务管理器内的所有nginx进程 在nginx.exe目录,打开命令行 ...

  2. SQL Server 对表的 12 种一般性操作

    01. 创建 create table Strings(ID int);    go 02. 为表添加列 alter table Strings    add String nvarchar(32); ...

  3. 第三篇 SQL Server代理警报和操作员

    本篇文章是SQL Server代理系列的第三篇,详细内容请参考原文. 正如这一系列的上一篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行,除了步骤中执行的工 ...

  4. 【译】第三篇 SQL Server代理警报和操作员

    本篇文章是SQL Server代理系列的第三篇,详细内容请参考原文. 正如这一系列的上一篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行,除了步骤中执行的工 ...

  5. sql server 警报管理,实时监听数据库动向,运筹帷幄之中

    工作这么多年了,无论是身边的同学还是同事,发现只要搞程序员的都有一个通病---懒.懒到谁都不愿意加班,尤其是"义务"加班.即使大家都不愿意加班,但是很多时候项目赶着上线或者上线之后 ...

  6. sql server维护解决方案(备份、检查完整性、索引碎片整理)

    请务必看原文 原文:https://ola.hallengren.com/frequently-asked-questions.html 经常问的问题 入门 如何开始使用SQL Server维护解决方 ...

  7. Python和SQL Server 2017的强大功能

    Python和SQL Server 2017的强大功能 摘要: 源:https://www.red-gate.com/simple-talk/sql/sql-development/power-pyt ...

  8. Sql Server 常用操作2

    FOR XML PATH应用 stuID学生编号,sName代表学生姓名,hobby列存学生的爱好! SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as ho ...

  9. Unofficial Microsoft SQL Server Driver for PHP (sqlsrv)非官方的PHP SQL Server 驱动

    原文 Unofficial Microsoft SQL Server Driver for PHP (sqlsrv) Here are unofficial modified builds of Mi ...

随机推荐

  1. iOS集成丁香园DXY OAuth 登陆 swift代码示例

    问:iOS集成OAuth登陆分几步? 答:和把大象放冰箱里一样. 第一步:打开webview,跳转到登陆页面: let url = "https://auth.dxy.cn/conn/oau ...

  2. Amazon RDS MySQL数据库还原时 log_bin_trust_function_creators 错误解决办法

    使用了Amazon AWS EC2免费云空间,数据库实例采用Amazon RDS.原来在Windows Server上有一个存在大量数据的MySQL数据库.现在需要在Amazon RDS上还原这个My ...

  3. 我的ORM之六-- 批量

    我的ORM索引 很多时候,批量方案是解决性能的关键 批量插入 SqlBulkCopy 利用 SqlBulkCopy 是性能最高的方式 实现: var s = dbr.Menu.NewMyOqlSet( ...

  4. 作业八—Alpha阶段项目总结

    一.项目的预期目标: 我们的图书管理系统之前的目标是做出可以让读者和管理员采用不同的搜索方式,并且时要做到读者和管理者两种不同的方式的!但是我们目前做到了部分搜索方式和管理员界面,主要原因是该项目如果 ...

  5. 谈谈javascript语法里一些难点问题(一)

    1)    引子 前不久我建立的技术群里一位MM问了一个这样的问题,她贴出的代码如下所示: var a = 1; function hehe() { window.alert(a); var a = ...

  6. 深入探究js中无所不在的this

    黄金守则: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window而当函数被作为某个对象的方法调用时, this等于那个对象. 下面是一些相关实践: --------- ...

  7. L# ForUnity Helloworld的更新方法

    Forunity目录结构 进入plugins 删除这三个目录 从Github代码位置copy 然后删除里面 bin obj property 项目文件等,仅留代码即可. 在editor运行test项目 ...

  8. java.rmi.NoSuchObjectException: no such object in table

    jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...

  9. 爱上MVC3系列~监视Action的运行时间,并提供超时记录机制

    回到目录 文章出现的原因 很久没写关于MVC的文章了,原因是将关注点移向了MVVM和DDD这边,而这篇文章完全是因为公司项目的需要,因为公司网站总是不定时的502,而这由可能是程序超时所引起的,为了分 ...

  10. 3D打印:三维智能数字化创造(全彩)

    3D打印:三维智能数字化创造(全彩)(全球第一本系统阐述3D打印与3D智能数字化的专业著作) 吴怀宇 编   ISBN 978-7-121-22063-0 2014年1月出版 定价:99.00元 42 ...