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 ...
随机推荐
- 作业三:PSP记录耗时情况
PSP2.1 Personal Software Process Stage Time planning 计划 15min Estimate 估计这个任务多久完成 130min Developing ...
- IE浏览器不能自动显示PDF文件的解决办法
今天更新了Adobe的PDF Reader,更新后发现在网页上无法预览PDF文件了,点击PDF的连接,浏览器就会提示下载或者打开,感觉很不爽,经过一番百度,找到了解决办法,在这里分享一下. 打开IE浏 ...
- Visual Studio 2012 Visual C++ 入门
改进的C++11标准的支持 标准模板库 为STL添加了新的库文件:<atomic>.<chrono>.<condition_variable>.<filesy ...
- Unity3D核心类型一览
Unity3D核心类型一览 本文记录了Unity3D的最基本的核心类型.包括Object.GameObject.Component.Transform.Behaviour.Renderer.Colli ...
- [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials
[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials 既上一篇分享了中文字幕的灯光介绍Lights后,本篇分享一下第3个已完工 ...
- WebApi系列~按需序列化字段~Hot
回到目录 起初只是一个想法,一次讨论,一个设想,但相信一定可以实现,具体的事情是这样的,有个对外的API项目,它为一些终端设备提供数据,如手机,平板,PC,当然你也可以说它为很多平台提供数据win32 ...
- 3 分钟轻松搭建 Ruby 项目自动化持续集成
任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这是一篇关于 Ruby 项目持续集成的快速指导教程,教大家如何使用 f ...
- iOS-----Xcode-Debug尝试
在Xcode中,Debug时,不能像eclipse ,或VS那些集成开发那样,能直接查看变量的值.那怎么在调试的时候查看XCode的变量呢? 有一些方法的. 1.新建一个Single View App ...
- java 面向对象
Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承.封装和多态.Java语言完全以对象为中心,Java程序的最小程序单位是类,整个Java程序由一个一 ...
- ASP.NET MVC的Action拦截器(过滤器)ActionFilter
有时项目要进行客户端请求(action)进行拦截(过滤)验证等业务,可以使用拦截器进行实现,所谓的action拦截器也没有什么的,只是写一个类,继承另一个类(System.Web.Mvc.Filter ...