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. Icident event 分析

    现象 备库中断,显示如下错误 Connect_Retry: 60 Master_Log_File: mysql-bin.000185 Read_Master_Log_Pos: 308647804 Re ...

  2. 【腾讯Bugly干货分享】微信Tinker的一切都在这里,包括源码(一)

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ecdf2d98250b4631ae034b 最近半年以来,Android热补 ...

  3. 通过Measure & Arrange实现UWP瀑布流布局

    简介 在以XAML为主的控件布局体系中,有用于完成布局的核心步骤,分别是measure和arrange.继承体系中由UIElement类提供Measure和Arrange方法,并由其子类Framewo ...

  4. 获取机器安装.NET版本的几种方式

    当调查应用程序问题时,通常需要先确认目标机器所安装的 .NET Framework 的版本.可以通过如下方式来确认版本号: 通过控制面板安装程序查询 通过查询注册表获取版本信息 通过查看安装目录获取版 ...

  5. 一个不陌生的JS效果-marquee,用css3来实现

    关于marquee,就不多说了,可以戳这里. 毕竟他是一个很古老的元素,现在的标准里头也不推荐使用这个标签了.但平时一些项目中会经常碰到这样的效果,每次都是重新写一遍,麻烦! JS类实现marquee ...

  6. [ACM_贪心] Radar Installation

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/A 题目大意:X轴为海岸线可放雷达监测目标点,告诉n个目标点和雷 ...

  7. JavaBean和Map转换封装类

    package com.ljq.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans. ...

  8. UStore-自定义JDF文件格式输出

    系统默认的JDF输出不能满足我们的需求,往往不同的供应商输出不同要求的JDF格式.这里我们开始介绍ustore的自定义JDF输出 1.先屏蔽掉默认的JDF格式输出 我们进入Tigger来设置ustro ...

  9. WebApi系列~安全校验中的防篡改和防复用

    回到目录 web api越来越火,因为它的跨平台,因为它的简单,因为它支持xml,json等流行的数据协议,我们在开发基于面向服务的API时,有个问题一直在困扰着我们,那就是数据的安全,请求的安全,一 ...

  10. [Spring框架]Spring开发实例: XML+注解.

    前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...