数据库邮件是从SQL Server数据库引擎发送电子邮件企业解决方案,使用简单传输协议(SMTP)发送邮件。发送邮件进程与数据库的进程隔离,所以可不用担忧影响数据库服务器。数据库
数据库邮件发送要求联网,考虑数据库服务器的安全性,不能将全部服务器的外网开启;处理以下图所示:一、监控服务器轮询每一个SQL数据库服务器;二、将获取的数据在监控服务器上集中处理,三、而后经过监控服务器的邮件服务发送邮件。安全
笔者发送的邮件内容以下所示,可分为个部分:一、发送主体(发生者);二、发送主题;三、邮件内容(报警开头,报警内容,报警解释);四、邮件结尾,每一个部分的都须要HTML脚本的实现。服务器
发送主体即为邮件发送者,主体名称在配置邮件服务的时候制定。在执行邮件发送时必需要指定发送,同时可经过msdb.dbo.sysmail_profile系统表查看邮件主体名称;以下邮件测试,指定邮件发送主体SQLmonitor。ide
发送主题可了解为邮件的分类,现有主题分类与说明以下。测试
邮件主题字体 |
分类说明spa |
JobError Monitor3d |
做业失败报警code |
Block Monitororm |
阻塞报警 |
SSISError Monitor |
轮询失败报警 |
Identity Monitor |
自增加报警 |
T_Space Monitor |
大表监控报警 |
AG Monitor |
AlwayOn高可用监控报警 |
LoginError Monitor |
登陆失败报警 |
Cpu Monitor |
Cpu报警 |
Disk Monitor |
磁盘报警 |
User Connection Monitor |
用户链接数报警 |
AbnormityLogin Monitor |
异经常使用户登陆报警 |
JobTimeout Monitor |
做业超时报警 |
邮件内容由三部分组成,分别为报警开头,报警内容,报警解释。
此三部分的内容可自定义格式,只要向M_MailFormart表添加以下数据:subject为报警主题,可定位此为哪一种邮件;Formart为报警表格的列名,用逗号隔开;Desc为报警解释,若要换行用逗号隔开便可。
报警开头包括三大块;"DBA"大字体凸显,邮件主题:经过集中处理时添加主题内容,监控时间:当前监控时间。
报警内容主要格式是表格,表格包括列名称和列内容。
列名称:由M_MailFormart表的Formart字段控制。经过逗号分隔每一个列名称。
列内容:列内容由报警处理脚本用户自定义插入,须要注意的是,用户自定义是要与列名称统一 。
因为表格是以HTML脚本控制,<tr></tr>表示表格的每行,<td></td>表示行中的列。例如要表示2行3列可书写为:
<tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
<tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>
为了邮件输出的美观,必须设置表格格式,笔者定义:'<td width=100 valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black"></td>'
邮件解释描述了报警机制,报警如何处理等方面,此定义经过M_MailFormart表指定,须要换行经过逗号指定便可。
邮件结尾只是申明此邮件,已经写定。
上述说明了将全部服务器的信息收集到监控服务器,而后统一分析处理,例如阻塞,做业失败等等。将处理完成的信息插入到邮件发送配置表M_SendMailItem中。
表中记录了邮件的各个信息,邮件报警经过获取该表信息,肯定是否发送报警和报警内容等等。
字段名称 |
字段解释 |
MessageID |
自增ID |
MessageType |
报警类型Error,Info |
Message |
报警内容 |
ServerName |
服务器名称 |
JobCode |
做业code;若非做业则为主题名称 |
JobName |
做业名称;若非做业则为主题名称 |
Stepid |
做业步骤;若非做业则NULL |
CreateDate |
新建时间 |
SendDate |
发送时间 |
SendStatu |
发送状态:S成功 F未发送 W不发送 |
SubJect |
邮件主题 |
SenderName |
发送主体 |
Recipients |
发送人 |
CopyRecipients |
抄送人 |
BodyFormat |
发送格式HTML |
Importance |
发送等级 |
ServerType |
服务器类型 |
做业名称为:[报警]JK136009YW 发送报警邮件;每分钟执行一次,经过执行spb_M_SendMial发送报警,该存储过程的处理流程以下所示。
(1)添加邮件格式M_MailFormart
若须要自定义邮件主题和列名称以及邮件的描述,可向下表插入相关信息。
1 INSERT INTO [dbo].[M_MailFormart] ([Subject],[Formart],[Desc],[Inserttime]) 2 VALUES (<Subject>,<Formart>,<Desc>,<Inserttime>)
(2)添加邮件内容M_SendMailItem
上述已经说明了邮件内容格式,M_MailFormart邮件格式表中的Subject内容必定要与M_sendmailitem邮件信息表的Subject对应上,且表格列名称要与邮件内容对应上。
以下定义了四列,也要在M_MailFormart的ForMart字段定义四列。添加完后邮件就会发送。
1 /*邮件内容定义*/ 2 DECLARE @body VARCHAR(MAX) 3 SET @body= 4 '<tr>'+ 5 '<td width=80 style="height:18pt"></td>'+ 6 '<td width=100 valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">'+列1内容+'</td>'+ 7 '<td width=100 valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">'+列2内容+'</td>'+ 8 '<td width=100 valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">'+列3内容+'</td>'+ 9 '<td width=100 valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">'+列n内容+'</td>'+ 10 '<td width=80 style="height:18pt"></td>'+ 11 '</tr>' 12 /*添加邮件记录*/ 13 INSERT INTO SQLMONITOR.dbo.m_sendmailitem 14 (messagetype, 15 message, 16 servername, 17 jobcode, 18 jobname, 19 stepid, 20 createdate, 21 senddate, 22 sendstatu, 23 subject, 24 sendername, 25 recipients, 26 copyrecipients, 27 bodyformat, 28 importance, 29 servertype) 30 SELECT 'Info', 31 @body, 32 '服务器名称', 33 '主题内容', 34 '主题内容', 35 NULL, 36 GETDATE(), 37 NULL, 38 'F', 39 '主题内容', 40 'SqlMonitor', 41 REPLACE(Stuff((SELECT DISTINCT ';' + email 42 FROM dbdmonitor.dbo.memberlist m WITH (NOLOCK) 43 WHERE id > 9000AND m.issendmail = 'T' 44 FOR XML PATH('')),1,1,''),'''','''''' ) AS recipients, 45 NULL, 46 'HTML', 47 'Normoal', 48 'P'
如下为用户异常登陆自定义的邮件内容。
若以为邮件自动格式添加麻烦,可经过已经有的格式添加邮件信息。以做业失败为主题的报警,可直接调用存储过程spb_AutoGetJobError添加报警信息。
1 EXECUTE [dbo].[spb_AutoGetJobError] 2 @jobcode='TEST'--报警做业Jobcode,若没有做业,则可随便填写。 3 ,@Messages='TEST'--报警内容 4 ,@Flag=0 --报警类型,默认0:Error 1:Warning 其余:Info
测试结果以下图所示:报警主题是做业失败,报警格式是做业报警格式,在Error Message中显示了须要报警的信息。