本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文。
正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行。SQL Server代理同样提供创建警报,能够以通知的形式将消息发送给设定的操作员。这些通知可以通过数据库邮件发送,数据库邮件是内置在SQL Server和SQL Server代理能够发送和接收电子邮件。在这一篇,你将学习如何配置数据库邮件发送和接收操作,以及一些基本的数据库邮件故障排除步骤。
数据库邮件的简要概述
在SQL Server 2000及更早的版本,提供的是称为SQLMail的邮件系统。SQLMail(最终将被删除,但仍然在SQL Server 2008 R2)使用MAPI(消息应用程序编程接口)API集发送和接收电子邮件。这种邮件系统有几个问题和局限性,包括:
->缺乏故障转移群集支持
->依赖的MAPI接口由另一应用程序提供(如微软Outlook)
->依赖SQL Server服务有一个MAPI配置文件
->无法重新发送邮件如果在邮件发送之前发生故障
->没有支持SQL Server的MAPI版本
由于这些限制,SQL Server 2005设计了一个新的邮件系统。新的邮件系统——数据库邮件,删除了这些局限性,大大提高SQL Server的邮件的可靠性。数据库邮件完全支持于故障转移群集配置。数据库邮件使用SMTP和邮件服务器通信,消除邮件API支持的任何外部依赖。数据库邮件在内部使用Service Broker队列处理所有邮件的请求,使邮件系统更强大。
数据库邮件作为一个独立的可执行,可以用Transact-SQL从msdb数据库中调用,使用存储在msdb中的安全信息直接与SMTP邮件服务器交互。
数据库邮件配置
数据库邮件默认不是开启的(很像SQL Server代理)。在你可以配置和使用它提供的功能之前,你必须启用数据库邮件。有三种方法可以启用数据库邮件:
->数据库邮件配置向导:这是一个图形化的向导,这将启用数据库邮件以及配置基本服务项目。这是我们将在本文中使用的。
->sp_configure:与大多数服务器配置选项,你可以使用sp_configure系统存储过程来启用或禁用数据库邮件。你指定"Database Mail XPs"(sp_configure高级选项)为1启用数据库邮件,或为0禁用数据库邮件。
->基于策略的管理
你可以将Facet"@DatabaseMailEnabled"的值设置为true,然后添加Facet配置的策略,并将策略应用到具体SQL Server。如果你想管理多台服务器,从扩展性来说这是最好的选择(基于策略的管理是在SQL Server 2008及更高版本才提供)
使用数据库邮件配置向导启用数据库邮件
要开始启用数据库邮件,用SSMS连接本地的SQL Server实例->管理->数据库邮件->配置数据库邮件,然后数据库邮件配置向导将启动,显示向导介绍。单击"下一步",你会看到在向导中可用的选项,如图4.1所示
图4.1 数据库邮件配置向导--选择配置任务
因为这是第一次运行数据库邮件配置向导,你需要保持数据库邮件选项设置。单击"下一步",提示你启用数据库邮件,如图4.2所示
图4.2 启用数据库邮件
虽然没涉及到安全,但你需要sysadmin服务器角色的成员来完成这项任务。选择"是",操作对应的的sp_configure命令会运行。你会看到新建配置文件对话框。输入配置文件的名称和描述,然后点击SMTP帐户列表旁边的添加…按钮,如图4.3所示
图4.3 创建数据库邮件帐户
账户名是为了方便,所以用一些让你容易记忆的。电子邮件地址将显示在SQL Server所发出邮件的"发件人"对应的真实email地址。显示名称对应"发件人"的别名/显示名。你可以设定答复电子邮件用于接收所有回复给SQL Server的邮件。
服务器名称可能是DNS名称或特定邮件帐户所使用的SMTP邮件服务器的IP地址。端口号默认为25,但是你的邮件服务器可能需要使用一个自定义的端口号。最后,你有三个SMTP身份认证选项。你可以使用数据库引擎服务凭据的Windows身份验证(这将SMTP服务作为的数据库引擎服务使用的服务帐户(mssqlservr.exe)),使用基本身份验证(用户名和密码),或者匿名认证(这真的意味着没有认证)。如果你不知道这些设置,你可以从你的公司的电子邮件管理员或Internet服务提供商(ISP)知道。多数ISP提供与你的Internet连接的电子邮件服务。
一旦你选择了合适的身份验证选项,单击OK完成邮件帐户配置。你可以在向导里创建其他帐户关联邮件配置文件。如果第一个账户因为某些原因无法连接到邮件服务器发送邮件,列表中的第二个帐户将会使用。你可以有多个帐户与一个邮件配置文件关联。现在,保持一个单一的SMTP帐户,然后单击"下一步"。你将选择使邮件配置文件,你已经创建了一个公共配置文件(允许所有授权数据库邮件用户使用此邮件配置发送邮件),或者你可以把它私有化(在这种情况下,你只能从msdb数据库使用用户ID联系配置文件)。因为这是第一个文件,把它设置为默认的公共配置文件(如图4.4)。
图4.4 设置数据库配置文件为公共
单击"下一步",你完成配置第一个数据库配置文件。但是,你现在面对"配置系统参数"对话框,它允许你查看或更改数据库邮件系统参数(见图4.5)。
图4.5 数据库邮件系统参数
你可以指定以下选项:
->帐户重试次数
邮件服务器尝试发送电子邮件的重试次数。在它放弃并切换到给定邮件配置文件的帐户列表中下一个电子邮件帐户之前,数据库邮件尝试发送电子邮件的次数
->帐户重试延迟时间(秒)
邮件服务器尝试发送电子邮件的时间间隔(秒)
->最大文件大小(字节)
邮件服务器发送电子邮件附件的最大文件大小(字节)。你可以把SQL Serverr的查询结果(包括其他)作为邮件附件发送,所以你可能会希望它尽可能的大。当然,你也可以限制邮件服务器的附件大小。
->禁止的附件文件扩展名
邮件服务器发送电子邮件附件时禁止使用的文件扩展名。这主要是作为一种方法来确保你的邮件系统不会通过程序或脚本传播病毒。当然你可以添加或删除扩展名。
数据库邮件可执行文件的最短生存期(秒)
There is overhead associated with starting up the database mail process(因为它运行的外部而不是数据库引擎或SQL服务器代理部分)。这个设置确定了在SQL Server代理最后一次发送电子邮件后数据库邮件会保持运行多长时间。如果你频繁使用数据库邮件,保持运行时间长点可以节省重新查询SQL Server和缓存内的信息(如帐户配置文件)。
->日志记录级别
确定写入数据库邮件事件日志的事件。有三种可能的日志记录级别--普通、已扩展、详细。如果你正在解决问题或希望看到尽可能多的数据库邮件信息,建议将日志记录级别设置为详细。然后你可以在SSMS中回顾数据库邮件日志(或msdb数据库中的sysmail_event_log视图)
当前保持默认设置,单击"下一步",然后完成创建邮件配置文件和帐户(图4.6)。
图4.6 完成数据库邮件配置向导
因为如果一切正常,你会看到类似图4.7,显示配置文件和帐户已经成功创建。如果因为某些原因这里出错,或者以后需要改变你对邮件创建的设置,重新启动数据库邮件配置向导,在第一个对话框(如图4.1),选择第二个单选按钮标记为"管理数据库邮件帐户和配置文件。"你将可以修改你刚才输入的一切,或创建新的邮件配置文件或邮件帐户。
图4.7 数据库邮件配置向导
下一步
当向导完成时,有几个步骤来确认你已正确配置数据库邮件。首先,你要发送测试邮件;然后,你应该查看数据库邮件日志。
发送测试邮件
在SSMS下右击数据库邮件节点,选择"发送测试电子邮件…",你会看到图4.8那样的对话框。给自己发送邮件来测试邮件系统是否正常运行。
图4.8 发送测试邮件
如果邮件发送成功,在弹出的数据库邮件测试电子邮件对话框单击"确定"。如果你不能够收到邮件,点击"疑难解答",可以通过在线丛书,查找合适的故障排除指南。
如果你能正常收到测试邮件,你就可以用这一系列的第三篇中提到的操作员来发送警报邮件。
查看数据库邮件日志
查看数据库邮件日志,你可以直接从msdb .. sysmail_event_log视图中查询,或在SSMS右键单击数据库邮件并选择"查看数据库邮件日志"菜单选项。你将看到日志文件查看器,这里我们只查看数据库邮件日志。如果你只有成功发送的邮件,你应该看到一条消息,数据库邮件进程已启动。如果有错误,如图4.9所示,一旦你选择一个错误的信息,在日志屏幕底部将显示有关错误的详细信息。
图4.9 日志文件查看器
如果你仍然有困难,你可以将数据库邮件中的日志记录级别调整为"详细"。你可以通过SSMS或通过msdb数据库中的sysmail_configure_sp存储过程。在SSMS中,右击数据库邮件,重新启动配置向导,并选择配置任务"查看或更改系统参数",你会再次看到图4.5,然后修改日志记录级别为详细。单击"下一步"完成向导,然后再次尝试发送电子邮件。你将在数据库邮件日志查看器中看到所有可用的日志信息。
Exp:电子邮件地址为A,答复电子邮件为B,发送测试邮件给C。C将收到A的电子邮件,发件人显示为"显示名称",如果C回复测试邮件,B将收到C的电子邮件。如图4.10所示
4.10 发送并回复测试邮件
下一篇
正如你所看到的,数据库邮件相当灵活,只要你有一个可以和SQL服务器通信的SMTP邮件服务器。数据库邮件的安全限制,允许你配置谁可以发送电子邮件(通过在msdb的DatabaseMailUserRole),以及限制特定用户使用邮件配置文件。你可以结合数据库邮件和SQL Server代理来发送警报和其他帮助自动化管理SQL服务器。
现在,你了解了作业、警报、操作员、数据库邮件的基础知识,下一步我们将开始了解SQL Server代理错误日志中不同类型的条目,了解他们如何可以帮助你解决SQL Server代理问题。