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. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  2. H5 缓存机制浅析 移动端 Web 加载性能优化

    腾讯Bugly特约作者:贺辉超 1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5 引入的离线存储, ...

  3. java 多线程(ReadWriteLock)

    package com.example; public class App { public static void main(String[] args) { Info info = new Inf ...

  4. mongodb(分片)

    分片(即sharding)是将数据拆分至不同数据节点的方式. 1.在mongoDB中提供了自动分片的方式,它会根据数据块(chunk)大小的设定,对片键进行拆分: 2.mongoDB配置分片,要配置三 ...

  5. kali linux Python开发环境初始化

    kali linux Python 黑客编程1 开发环境初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论.Pyth ...

  6. 【吉光片羽】奇怪的Bug-细节的问题

    这几天用Winform开发了一个小界面,遇到几个奇怪的问题,记录一下. 1.背景图片漏光. 当时很是奇怪,以为是图片的问题,让美工重新发,改成jpg也都存在.很是奇怪,原图这个地方肉眼看是不透明的,而 ...

  7. [.net 面向对象程序设计进阶] (8) 托管与非托管

    本节导读:虽然在.NET编程过程中,绝大多数内存垃圾回收由CLR(公共语言运行时)自动回收,但也有很多需要我们编码回收.掌握托管与非托管的基本知识,可以有效避免某些情况下导致的程序异常. 1.什么是托 ...

  8. C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

    上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...

  9. 支持断点续传的文件上传插件——Huploadify-V2.0来了

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  10. SlipHover,能感知鼠标方向的图片遮罩效果jQuery插件

    接上一篇博文,介绍完jQuery插件开发后这里上一个自己的作品,也是初次实践,小有成就的感觉. 话说这个插件年前就写好了,然后挂到GitHub,然后就偷偷看着Google Analysis心中暗自激动 ...