數據庫郵件是從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中顯示了須要報警的信息。