你的位置:首页 > 数据库

[数据库]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。

1 Select name from sys.all_objects 

下篇预告

如你所见,数据库邮件非常简单,一旦你有一个兼容SMTP的邮件服务器,你就可以和你的SQL Server进行交互,非常灵活。数据库邮件有安全限制,允许你配置谁可以发送邮件(通过msdb里的DatabaseMailUserRole),也可以使用邮件配置来限制特定用户。你可以使用SQL Server代理的数据库邮件来发送警报来自动话SQL Server的管理。

现在你有作业、警报、操作员的基础,邮件也可以发送了,下篇我们来看看下SQL Server代理的错误日志,还有它如何帮助我们进行SQL Server代理的故障排除。