SQL Server代理(4/12):配置数据库邮件
SQL Server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的。这系列文章会通俗介绍它的很多用法。
在以前的文章里我们看到,SQL Server代理由一系列的作业步骤组成,每个作业步骤是要进行的不同工作类型。SQL Server代理也提供创建警报的功能,它可以发消息给指定的操作员作为提醒。这些提醒很可能通过数据库邮件发送,SQL Server和SQL Server代理内建的功能来发送和接收邮件。在这篇文章里,你会学到如何配置数据库邮件来进行发送和接收操作,还有数据库邮件的基本故障排除步骤。
数据库邮件的简单介绍
在SQL Server 2000或以前的版本里,邮件系统就可用,被称为SQLMail。SQLMail(最终会被移除掉,但在SQL Server 2008 R2里还是存在的)使用MAPI(邮件应用程式接口(Messaging Application Programming Interface))的API来代表SQL Server实例来发送和接收邮件。在这个邮件系统里有很多问题和限制,包括:
- 不支持故障群集
- 依赖别的程序(例如微软的Outlook)提供的MAPI
- 依赖SQL Server服务有MAPI配置
- 邮件发送后,如果发送失败不能重发
- 没有支持SQL Server可用MAPI版本
由于这些限制,新的邮件系统为SQL Server 2005设计了。那个新的邮件系统,数据库邮件,去掉了这些限制,大大提高了SQL Server邮件的可靠性。在故障群集配置了,数据库邮件完全支持。数据库邮件使用SMTP与邮件服务器交互,取消了额外邮件API的支持。数据库邮件内部使用服务代理(service broker)对所有邮件进行队列管理,使邮件系统更加健壮。
数据库邮件可独立运行,让T-SQL的调用到msdb数据库,然后直接与SMTP邮件服务器交互,使用在msdb数据库存储的安全信息。
数据库邮件配置
数据库邮件默认是没有配置的(和SQL Server代理类似)。在可以配置和使用它的功能之前,首先你必须启用数据库邮件。你有3个不同的方式启用数据库邮件:
数据库邮件配置向导
- 图形化向导,从SSMS启动,会启用数据库邮件并配置服务的基本能力。这是我们这篇文章里要介绍的。
- sp_configure
- 和大多数服务器配置选项一样,你可以使用sp_configure系统存储过程来启用或停用数据库邮件。你指定“Database Mail XPs”选项(在sp_configure里的高级选项)为1来启用数据库邮件,0来停止数据库邮件。
- 基于策略管理
- 你可以指定”@DatabaseMailEnabled“并设置值为True,然后添加这方面的配置到策略,并应用策略到特定的SQL Server。如果你想管理多个服务器的话,这是从扩展性来说最好的选项(基于策略的管理自SQL Server 2008和以后版本都可用)。
使用数据库邮件配置向导来启用数据库邮件
在开始数据库邮件前,使用SSMS连接到你的SQL Server本地实例,然后展开管理文件夹,右击【数据库邮件】。选择【配置数据库邮件】,数据库邮件配置向导会启动,显示向导的介绍,点击【下一步】,你会看到向导里的可用选项,如插图1所示。

插图1——数据库邮件配置向导——选择配置任务
因为这是你第一次运行数据库邮件配置向导,你会需要保持这个选择来配置数据库邮件。点击【下一步】,你会看到启用数据库邮件的对话框,如插图2所示。

插图2——是否启用数据库邮件?
还没提到安全,你会需要是sysadmin服务器组成员才可以完成这个任务。选择【是】,合适的sp_configure命令会代你运行。你会看到【新建配置文件】对话框。输入配置文件名和描述,然后点击【增加】按钮进入SMTP账号列表,如插图3所示。

插图3——新建数据库邮件账号
账号名称是写给你看的,因此要使用一些有意义的名称。邮件地址会显示来自SQL Server的名称。取个允许你专门发送SQL Server邮箱的名字更好。当然,你也可以使用日常的邮箱。
服务器名称是SMTP邮件服务地址(博主注:首先要保证你的邮件已经启用SMTP功能)。使用【基本身份认证】(用户名要参考具体邮件服务器的要求)。
完成这些配置后,点击【确定】来结束邮件账号配置。你可以按照这个方法创建多个邮件账号,如果第一个账号发送失败,第二个账号会自动启用。对于一个邮件配置可以拥有多个邮件账号。现在,我们切换回单个邮件账号界面,点击【确定】。你要设置你创建的账号为【公共配置文件】(例如让所有认证的数据库邮件用户使用这个邮件配置来发送邮件),你可以保持它为私有(你会关联一个数据库用户来使用这个配置文件)。因为这是第一个配置文件,我们设置为公共配置(如插图4所示)。

插图4——设置数据库配置为公共。
点击【下一步】,你完成了初始数据库配置的配置。可是,现在出现在你面前的是【配置系统参数】对话框,允许你修改数据库邮件系统级的设置(如插图5所示)。

插图5:数据库邮件系统参数
在这里你可以指定下列选项:
- 账户重试次数:在给出的邮件配置里的账号列表,切换到第二个账号前,使用第一个邮件账号尝试失败次数。
- 账户重试延迟时间:在每次尝试连接并使用SMTP邮件账号之间的等待时间(秒为单位)
- 最大文件大小(字节):使用数据库邮件允许的最大附件大小。你可以把来自SQL Server的查询结果通过邮件附件进行发送,因此你可能会希望它尽可能大。但邮件服务器上的附件大小设置会覆盖这里的配置。
- 禁止的附件文件扩展名:数据库邮件不能发送的扩展名列表。这主要用来保证你的邮件系统不会通过可执行的或脚本来传播病毒。当然,你可以按需要添加自己或删除自己SQL Server需要的文件扩展名。
- 数据库邮件可执行文件的最短生存期(秒):数据库邮件进程启动时有个额外开销(因为它在外部运行,并不是数据库引擎或SQL Server代理的一部分)。这个设置决定SQL Server代理使用数据库邮件发送邮件后的持续运行时间。如果你经常使用数据库邮件,可以保持这个进程运行更长,可以让数据库邮件的启动更短,因为SQL Server邮件需要重新查询SQL Server并缓存内部信息(例如账号配置),发送邮件时,它们是必须的。
- 日志记录级别:有三个记录级别:普通、扩展、详细。如果你在故障排除或想查看更多的数据库邮件信息,可以设置记录级别为详细。你可以在SSMS里检查数据库邮件记录级别(或者在msdb数据库里的sysmail_event_log视图里)。
现在的话,接受默认,点击【下一步】完成【数据库邮件配置向导】(如插图6所示)

插图6——完成数据库邮件向导
如果一切顺利的话,你会看到如插图7的结果,显示已经创建的配置和账号,账号与配置文件关联,配置文件是公共的。如果这里发生了错误,或者你需要修改邮件设置的配置,重新运行数据库邮件配置向导,在第一个对话框上(如插图1所示),选择第二个选项【管理数据库邮件账号和配置文件】,你可以修改所有输入的信息,创建新的邮件配置或邮件账号。

插图7——向导成功执行所有的命令
下一步
一旦向导完成,有2个步骤可以确认你的数据库邮件已经成功配置,首先,你会想发送一个测试邮件。然后,你应该检查下日志来看看数据库邮件记录测试邮件发送的基本信息。
发送测试邮件
发送测试邮件,在SSMS里右击【数据库邮件】节点,在菜单选项里选择【发送测试邮件】,你会看到如插图8的对话框。


插图8:发送测试邮件
如果邮件发送成功,点击【发送测试电子邮件】按钮后,出现的【数据库邮件测试电子邮件】对话框上的【确定】按钮。如果你不能收到邮件,点击【疑难解答】按钮,会出现数据库邮件故障排除的帮助链接。对于SQL Sever 2008 R2有很多可用选项,如插图9所示。选择合适的症状,你可用按照向导提示来进行故障排除。

插图9——数据库邮件故障排除
如果一切顺利,你会看到如插图11所示的邮件信息。一旦配置成功,你可用使用邮件操作员,如第3篇文章所介绍的在SQL Server里发送邮件警报。

插图10——来自SQL Server数据库邮件的测试邮件
检查数据库邮件日志
检查数据库邮件日志,你要么直接查看msdb..sysmail_event_log视图,或者在SSMS里右击数据库邮件,选择【查看数据库邮件日志】。你会看到标准日志文件查看器,只过滤显示了数据库邮件日志。如果你成功发送了邮件,你会看到数据库邮件进程启动。如果你有错误,你会看到对应的错误信息,点击信息会日志界面底部显示关于错误的具体信息。

插图11——日志文件查看器查看数据库邮件日志
如果你还有困难,你可以在数据库邮件里调整日志级别为详细。有2个操作方法,一个是SSMS,右击数据库邮件,再次启动配置向导,选择【查看或修改系统参数】,你会看到会插图5一样的界面,选择【日志记录级别】为【详细】,点击【下一步】来完成向导,再次尝试发送邮件。你会在数据库邮件日志视图里看到详细日志信息。另一个就是通过msdb数据库里系统存储过程sysmail_configure_sp。
Select name from sys.all_objects
下篇预告
如你所见,数据库邮件非常简单,一旦你有一个兼容SMTP的邮件服务器,你就可以和你的SQL Server进行交互,非常灵活。数据库邮件有安全限制,允许你配置谁可以发送邮件(通过msdb里的DatabaseMailUserRole),也可以使用邮件配置来限制特定用户。你可以使用SQL Server代理的数据库邮件来发送警报来自动话SQL Server的管理。
现在你有作业、警报、操作员的基础,邮件也可以发送了,下篇我们来看看下SQL Server代理的错误日志,还有它如何帮助我们进行SQL Server代理的故障排除。
原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/72455/
SQL Server代理(4/12):配置数据库邮件的更多相关文章
- SQL Server代理(5/12):理解SQL代理错误日志
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...
- SQL Server代理(1/12):配置和概况
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理是SQL Serv ...
- SQL Server代理(11/12):维护计划作业
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模 ...
- SQL Server代理(10/12):使用代理账号运行作业
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用 ...
- SQL Server代理(7/12):作业活动监视器
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前几篇文章里,你创建配置了SQ ...
- SQL Server代理(3/12):代理警报和操作员
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的文章里所见,SQL Se ...
- SQL Server代理(9/12):理解作业和安全
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在S ...
- SQL Server代理(8/12):使用SQL Server代理外部程序
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQ ...
- SQL Server代理(6/12):作业里的工作流——深入作业步骤
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这里系列的前几篇文章所见,SQL ...
随机推荐
- JavaScript调试工具
最常用的最有效的有三个: 1. FireFox浏览器的Firebug,我用得不多 2. IE 8浏览器的Microsoft Script Editor.当运行网页的脚本出错时,会报错,如下所示: 单击 ...
- Xamarin开发Android笔记:使用ZXing进行连续扫描
在项目开发中需要使用到条码扫描,因为以前就测试过ZXing,感觉识别速度和功能都不错,所以直接引用.不过在实际开发的过程中,却遇到连续扫描的问题,每次扫描识别完成之后,扫描窗体自动关闭了. 在Xama ...
- hadoop研究:mapreduce研究前的准备工作
继续研究hadoop,有童鞋问我,为啥不接着写hive的文章了,原因主要是时间不够,我对hive的研究基本结束,现在主要是hdfs和mapreduce,能写文章的时间也不多,只有周末才有时间写文章,所 ...
- Caliburn实现MVVM模式的编程
引言:什么是Caliburn ? 一个夜晚,一处教堂,人们忏悔结束后抬头看到一把宝剑插在一块石头上.石上字述“英格兰人,凡能从石头上拔出剑者,为王者!”,Caliburn就是英格兰人心中的石中剑,这把 ...
- 学习Scala02 基本类型
scala中有9大基本类型: Byte .Short .Int .Long. Char .String .Float. Double .Boolean 与java的基本类型看起来基本是一致的,但实际上 ...
- 获取IOS应用的子目录
在开发IOS应用时,我们经常需要将素材分类,并放入相应地子目录中. 在开发代码时,需要访问这些素材时,就需要获取对应的子目录路径.那么如何获取呢? 获取应用路径 首先,要找到应用所在的路径. NSSt ...
- [每天默写一个算法]KMP
[每天默写一个算法]KMP 作业要求:默写String的KMP算法. KMP是经典的字符串匹配算法.复杂度为O(n+m) public static class StringKMP { /// < ...
- IOS 多线程03-GCD
如果在本文之前要了解一下线程的基本知识,请访问下面的网址:http://www.cnblogs.com/alunchen/p/5337608.html 1.简介 GCD不仅适用于Object-C,也适 ...
- Atitit 知识图谱的数据来源
Atitit 知识图谱的数据来源 2. 知识图谱的数据来源1 a) 百科类数据2 b) 结构化数据3 c) 半结构化数据挖掘AVP (垂直站点爬虫)3 d) 通过搜索日志(query record ...
- vb6里面dim和set的区别
dim是作用于变量 声明变量并分配存储空间 set作用于对象 将对象引用赋给变量或属性 例子: dim A as collection set A=new collection 等效于 di ...