本文介绍如何基于Database Mail功能配置作业失败告警,实现作业执行失败时自动发送邮件通知,帮助您及时发现并处理异常。
适用范围
-
SQL Server实例规格族为独享型。
准备工作
配置公网NAT网关
-
创建NAT网关
-
登录NAT网关管理控制台,单击创建公网NAT网关。
说明首次使用NAT网关时,需要在公网 NAT 网关页面关联角色创建区域,单击创建关联角色,角色创建成功后即可创建NAT网关。
-
配置以下核心参数,并单击立即购买。
-
地域、网络及可用区:需要与RDS SQL Server实例保持一致。
-
网络类型:选择公网NET网关。
-
弹性公网IP:选择稍后配置。
-
-
在确认订单页面确认公网NAT网关的配置信息后,单击立即开通。
-
-
绑定公网IP
-
在NAT网关管理控制台页面,找到新建的公网NAT网关实例,单击实例ID,进入基本信息页。
-
切换至绑定的弹性公网IP页签,单击绑定弹性公网IP。
-
在绑定弹性公网IP弹窗中,选择新购弹性公网IP并绑定,单击确定。
-
-
创建SNAT条目
-
在NAT网关管理控制台页面,找到新建的公网NAT网关实例,单击实例ID,进入基本信息页。
-
切换至SNAT管理页签,单击创建SNAT条目。
-
在创建SNAT条目页面,配置以下参数,然后单击确定创建。
-
SNAT条目粒度:选择交换机粒度。
-
选择交换机:选择RDS SQL Server实例所在的交换机。
-
选择弹性公网IP地址:选择第二步中配置的公网IP。
-
-
获取目标邮箱授权码
-
登录目标邮箱(本文以QQ邮箱为例),依次进入设置 > 账号与安全 > 安全设置页面。
-
开启POP3/IMAP/SMTP/Exchange/CardDAV服务,并生成授权码。
配置邮件告警
通过SSMS管理界面配置
为方便您快速搭建邮件告警流程,以下仅介绍核心步骤配置,详细内容请参考SSMS官网文档。
-
配置Database Mail
-
进入SSMS管理界面,选择待配置的数据库实例,进入Management节点,右键单击Database Mail,选择Configure Database Mail。
-
选择Set up Database Mail by performing the following tasks,并单击Next进入New Profile页面。
-
在Profile name处输入配置文件名称,在SMTP accounts处,依次单击Add > New Account新建一个SMTP账号用于向SMTP 服务器发送电子邮件。
-
在新建账号页面,配置以下核心参数,并单击OK:
-
Account name:填入新的账号名称。
-
Email address:填入目标邮箱地址。
-
Server name与Port number:以QQ邮箱为例,分别填入
smtp.qq.com与587,同时勾选This server requires a secure connection (SSL)以启用SSL安全加密。不同邮件服务商支持的端口与SSL加密可能不同,以目标邮件服务商提供的信息为准。 -
SMTP Authentication:配置SMTP身份验证,选择Basic Authentication,在User name处填入目标邮箱地址,在Password处填入邮箱授权码。
-
-
如您无特殊需求,以下步骤可以直接点击Next使用默认配置直至配置完成:
-
Manage profile security:设置Profile文件的属性为Public(允许任何有权访问数据库的用户或角色发送邮件)或Private(仅特定用户或角色可发送邮件),并设置文件是否为默认(Default Profile)。
-
Configure System Parameters:设置重试次数、重试延迟、最大文件大小、禁止使用的附件文件扩展名、日志级别等系统参数。
-
核对账号配置,单击Finish完成。
-
-
测试邮件发送:
-
右键单击Management > Database Mail,选择Send Test E-Mail。
-
选择上一步新创建的Profile,并填入目标邮箱地址。
-
-
-
配置SQLAgent
-
配置Operator:
-
右键单击SQL Server Agent > Operator,选择New Operator。
-
填入自定义的Operator名称与目标邮箱地址,单击OK。
-
-
配置Jobs:
-
查看SQL Server Agent > Jobs属性,进入Notifications页面。
-
勾选E-mail,选择上一步中新建的Operator,并选择当任务进入何种状态时告警。本文以任务工作失败告警为例,选择When the job fails。
-
-
通过脚本配置邮件告警
以QQ邮箱为例,可以通过以下脚本配置邮件告警:
-
首次配置邮箱告警
EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'QQMailAccount', -- 账户名称(自定义) @email_address = '@qq.com', -- 目标邮箱(QQ邮箱)地址 @display_name = 'SQL Server通知', -- 显示名称(自定义) @replyto_address = '@qq.com', -- 回复邮箱(可以与目标邮箱一致) @mailserver_name = 'smtp.qq.com', @mailserver_type = 'SMTP', @port = 587, @username = '@qq.com', -- 目标邮箱(QQ邮箱)地址 @password = '你的16位授权码', -- 替换成实际的授权码 @use_default_credentials = 0, @enable_ssl = 1; GO -
更新邮箱与测试邮件
-- 查看并获取account name,然后贴到下面的account_name变量中 SELECT a.account_id, a.name AS account_name, a.email_address, s.servertype, s.servername AS smtp_server, s.port, s.username, s.use_default_credentials, s.enable_ssl FROM msdb.dbo.sysmail_account a INNER JOIN msdb.dbo.sysmail_server s ON a.account_id = s.account_id; -- 更新邮件配置,填入待更新的邮件地址等参数 EXECUTE msdb.dbo.sysmail_update_account_sp @account_name = 'tttt', -- 上一步中获取的account name @email_address = '123@qq.com', @display_name = '显示名称', @replyto_address = '123@qq.com', @mailserver_name = 'smtp.qq.com', @mailserver_type = 'SMTP', @port = 465, @username = '123@qq.com', @password = '16位授权码', @use_default_credentials = 0, @enable_ssl = 1; --获取Profile的名称,填到下面发送测试邮件的脚本中 SELECT * FROM msdb.dbo.sysmail_profile; --发送测试邮件 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'test', -- 上一步中获取的Profile名称 @recipients = 'xxx@xxx.com', @subject = '测试邮件', @body = '这是测试邮件内容3';