SQL Server自動化運維系列——關于郵件通知那點事(.Net開發人員的福利)

需求描述

在我們的生產環境中,大部分情況下需要有自己的運維體制,包括自己健康狀態的檢測等。如果發生異常,需要提前預警的,通知形式一般為發郵件告知。

郵件作為一種非常便利的預警實現方式,在及時性和易用性方面也有著不可替代的優點。

所以,在本篇中將詳細的分析下在SQL Server中的郵件通知功能及使用方式等。?

本篇實現

1、通過SQL Server自帶的郵件功能實現運維的預警及檢測

2、利用數據庫郵件組件代替傳統的C#發送郵件的弊端

3、實現Job任務運行狀態的檢測

4、利用PowerShell實現Job任務計劃的檢測

<1>基礎配置

首先,我們來配置下SQL Server中的郵件組件的基礎服務項。SQL Server自從05版本起,郵件功能就不需要開啟外配配置管理器了,它有著自己的組件,實現郵件發送的功能。

如果,沒使用過,可以按照以下步驟進行配置,步驟很簡單。

右鍵,配置數據庫郵件

然后直接下一步就行,然后新建一個賬戶

然后,下一步完成就可以,步驟很簡單,這里面有幾個概念需要理清楚,對于SQL Server的郵件賬戶是由權限控制的,目的是實現不同的人使用不同的郵件賬戶,比如大型數據庫的管理一般有好幾個DBA負責運維,分職責之后的運行,發 送預警郵件也就產生了區分,總不能模塊中出現了任何問題都發送給一個人。

跟你一毛錢關系都沒有的異常,天天給你發郵件,是不是很不爽??....這種管理方式是灰常暴力的!

為了解決上述問題,SQL Server對郵件的賬戶進行了分類:

?

分為公共賬戶和專用賬戶。

一般如果管理人員少,就配置一個公共賬戶就可以,有問題都發送到該郵箱就可以。

至此,你已經完成了數據庫郵件模塊的配置,步驟很簡單。這里可以發送一封測試郵件,來測試下郵件的連通性。

提示:SQL Server郵件組件的運行需呀SQL Server Age運行執行,所以需要確保此服務正在運行。

在“數據庫郵件”上右鍵,發送測試電子郵件,輸入目標郵箱的地址,然后單擊發送就可以。

?

至此,你的SQL Server已經完成郵件組件的基礎配置,然后剩下的工作就是如何利用該組件進行部分工作的完成了。

?

<2>c#調用數據庫郵件組件進行郵件的發送?

還記得當年剛畢業的時候,對于發送郵件這塊功能當時是異常的癡迷,各種的研究和各種的調試。

后來的終歸在廢了九牛二虎之力之后,終于在一個午夜夢回之時看到了我夢寐以求的測試郵件發送通知,想想一個字描述:草!

大體我記得需要引用以下幾個命名空間:using?System.Net;??using?System.Net.Mail;?

然后利用C#提供的SmtpClient類進行組裝成郵件實體,而后一個Send()方法,這其中的痛苦點在于各種編碼規范等。

我相信現在也有很多程序猿依然再采用著這種方式。

今天提供另外一種靈活的實現方式,利用SQL Server數據庫的郵件組件進行郵件的發送。

關于上面第一個步驟提供的郵件組件的調用,其實在SQL Server中是提供系統自帶的存儲過程進行實現的。方法如下:

該存儲過程提供了發送郵件的的各種參數,完全滿足發送郵件的各種需求,比如:主題、內容、附件、CC、秘密CC....等等吧

調用該存儲過程的方法如下:

復制代碼
    --存儲過程調用發郵件EXEC msdb.dbo.sp_send_dbmail@profile_name = 'testMail',@recipients = '787449667@qq.com', @body = '這是測試郵件', @subject = '我發的', @file_attachments='C:\temp\3-26-2015-16-20-21.png'
復制代碼

上面一個簡單的方法執行既可以實現,郵件的發送。

然后,你需要的就是c#調用該存儲過程了。

關于寫C#代碼通過Ado.net調用存儲過程的過程這里就不贅述了,我相信這是入門級別的小白也能搞定的事情了。

而后,這里捎帶分析一下郵件組件的原理和性能問題。我相信這是很多人關心的,其實SQL Server的郵件發送時通過一個底層的JOB輪詢執行的,所以根本不用擔心其執行順序和性能問題。

并且SQL Server為此還提供了幾個系統的視圖來查看歷史運行狀態和當前郵件的隊列狀態:

    --郵件內容SELECT * FROM msdb.dbo.sysmail_allitems

    --郵件發送日志SELECT * FROM msdb.dbo.sysmail_event_log

并且SQL Server提供了郵件重新發送的功能以及其它默認參數,具體設置參照此畫面:

至此,已經完成了利用C#進行發送郵件的功能。

我相信基本上用C#就會搭配微軟自己的SQL Server數據庫,而使用它之后就可以少量的代碼實現郵件發送的功能。

?

?<3>實現Job任務運行狀態的檢測?

在我們使用SQL Server的時候,很多情況下都需要自定義Job進行部分功能的實現,而大部分時間是采取凌晨或者非業務期進行工作。

而此Job的運行結果的檢測便形成了一個需要跟蹤的問題,比如有時候N個Job的運行,只有幾個出現問題,并且不確定的此Job發生在那個機器上,所以自動化運維的重要性就不言而喻了。

對于上面問題的解決,SQL Server提供了很簡單的配置就可以實現。

(1)首先,需要定義幾個操作員,說到底就是幾個人值班運維此數據庫的

?

上面,我就定義了一個人,其實可以定義多個人,幾個運維人員幾個...

(2)其次,需要定義警報,說到底就是將產生的預警發送給上面的幾個運維人員。

這里面的嚴重性選項其實是一個很重要的功能,一些簡單的問題警告有時候是不需要及時關注的,或者說不需要暫時處理的。

但是有些問題則需要里面去解決,比如服務器宕機....

然后,我們來將此預警關聯之操作員

到此,我們已經完成了預警的檢測配置,然后需要的就是關聯下Job代理的任務屬性值。

經過上面的配置,任何我們自定義的Job工作狀態都可以進行自動化檢測了。

比如:某個Job跑批成功了,某個Job跑批失敗了。我們來新建一個自定義的Job來測試下:

?

然后設置警告

然后,在運行此Job出現異常的時候,就可以自動的報告到相應的運維人員了。

這里我們就設置了一個運維人員,所以這里只發送給一個人。

我們來手動運行下,來測試一下效果

嘿嘿,果然,發出了警報,看起來很貼心的樣子

?

至此,此功能已經配置完成,自己可以靈活的實現。

?

?<4>利用PowerShell實現Job任務計劃的檢測

關于Job的明細日志,請參照如下文章:

SQL Server自動化運維系列——監控跑批Job運行狀態(Power Shell)

?

結語?

本來打算將利用Power Shell腳本檢測的功能實現方式也加上的,但文章已經稍有點篇幅了,后續再完成吧。此篇的關于SQL Server的郵件功能算作拋磚引玉了,自己另有需求可以自己靈活實現。

其實,在本篇所介紹的Job任務的檢測在幾臺服務器上存在還問題不大,但是如果多臺服務器,如果每臺服務器上都有幾個Job異常的話,每天早上打開郵件多的估計會令你頭皮發麻,并且在自帶的異常報警中,沒有給出詳細的錯誤信息,其實這是一個很不爽弊端。

所以,為了優雅的進行自動化運維的工作,我們將會每次將我們所有檢測的服務器Job運行狀態進行掃描,而后將其匯總至一封郵件,然后按照重要性發送至固定的運維人員。

聽起來是不是還有點小激動的樣子,下一篇我們來實現此功能。有興趣的童鞋,可以提前關注。

關于SQL Server自動化運維和檢測的內容很廣泛,其中很多都是從日常的經驗中出發,一步步的從手動到自動的過程。

?

如果您看了本篇博客,覺得對您有所收獲,請不要吝嗇您的“推薦”。?

轉載于:https://www.cnblogs.com/lykbk/p/fgsdfsf345435454.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375113.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375113.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375113.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

So easy Webservice 1.Socket建設web服務

socket 是用來進行網絡通訊的&#xff0c;簡單來說&#xff0c;遠程機器和本地機器各建一個socket&#xff0c;然后通過該socket進行連接通訊 socket簡單模型圖&#xff1a; socket的原理圖&#xff1a; 代碼實現&#xff1a; 1.創建socket服務端&#xff1a;用于處理客戶端發送…

去除字符串中重復字符

題目 設計算法并寫出代碼移除字符串中重復的字符&#xff0c;不能使用額外的緩存空間。注意&#xff1a; 可以使用額外的一個或兩個變量&#xff0c;但不允許額外再開一個數組拷貝。 進一步地&#xff0c; 為你的程序寫測試用例。 解答 這道題目其實是要你就地(in place)將字符…

MyEclipse 6.5安裝maven插件

MyEclipse 6.5安裝maven插件 原文 http://www.blogjava.net/caojianhua/archive/2013/11/05/406013.html 一、卸載原有maven插件 MyEclipse 6.5集成了Maven插件&#xff0c;不過有不少bug&#xff0c;用習慣了m2eclipse&#xff0c;不想在這上面浪費時間。要安裝m2eclipse&…

兩列右側自適應布局--(來自網易)

<div class"g-bd1 f-cb"><div class"g-sd1"><p>左側定寬</p></div><div class"g-mn1"><div class"g-mn1c"><p>右側自適應</p></div></div> </div> /* 兩列右…

Gradle 筆記

網上有一篇文章說的很明白&#xff0c;圖文來教你在eclipse下用gradle 來打包Androidhttp://blog.csdn.net/x605940745/article/details/41242687 步驟為&#xff1a; 1. Elipse里面導出&#xff0c;Generate Gradle build files 2. 找到生成的gradle文件夾&#xff0c;里面有…

sql server 自定義函數的使用

sql server 自定義函數的使用自定義函數 用戶定義自定義函數像內置函數一樣返回標量值&#xff0c;也可以將結果集用表格變量返回 用戶自定義函數的類型: 標量函數:返回一個標量值 表格值函數{內聯表格值函數、多表格值函數}:返回行集&#xff08;即返回多個值&#xff09; 1、…

怎么設置才能讓外網ip可以訪問mysql數據庫[轉]

轉自&#xff1a; http://www.hongyanliren.com/89.html 使用mysql中&#xff0c;很多人都會遇到這樣的問題&#xff1a;在vps服務器或者云服務器上安裝了mysql后&#xff0c;使用其他工具在外網ip之下根本就連接不上mysql&#xff0c;到底是什么原因導致外網ip無法訪問mysql數…

Java 自帶MD5 校驗文件

http://www.iteye.com/topic/1127319 前天第一次發表博客到論壇&#xff0c;關于Java文件監控一文&#xff0c;帖子地址在&#xff1a;http://www.iteye.com/topic/1127281 評論的朋友很多&#xff0c;下載代碼的朋友很不少&#xff0c;感謝在論壇上看我帖子的朋友&#xff0c;…

決策樹資料匯總

2012年8月26日決策樹&#xff08;Decision tree&#xff09;決策樹是以實例為基礎的歸納學習算法。它從一組無次序、無規則的元組中推理出決策樹表示形式的分類規則。它采用自頂向下的遞歸方式&#xff0c;在決策樹的內部結點進行屬性值的比較&#xff0c;并根據不同的屬性值從…

metasploitable2滲透測試

一、系統弱密碼登錄 1、在kali上執行命令行telnet 192.168.26.129 2、Login和password都輸入msfadmin 3、登錄成功&#xff0c;進入系統 4、測試如下&#xff1a; 二、MySQL弱密碼登錄&#xff1a; 1、在kali上執行mysql –h 192.168.26.129 –u root 2、登錄成功&#…

Portainer.io:讓容器管理變得更加直觀

在現代軟件開發和部署中&#xff0c;容器化技術已經變得越來越流行。Docker 是其中一種領先的容器化平臺&#xff0c;而 Portainer.io 則是一個優秀的管理工具&#xff0c;使得 Docker 的使用變得更加簡單和可視化。本文將介紹 Portainer.io 的基本功能和如何在 Docker 上安裝和…

倉庫信息查詢練習

use cangku create table cangkubiao ( cno varchar(50) primary key not null, city varchar(50)not null, mianji int not null ) insert into cangkubiao values(wh1,北京,370) insert into cangkubiao values(wh2,上海,500) insert into cangkubiao values(wh3,廣州,200) …

python開發的一些tips

1. Notepad編寫python腳本 1&#xff09;新建文件&#xff0c;編寫代碼 2&#xff09;點擊菜單欄&#xff0c;“語言”—>“P”—>“Python”&#xff0c;設置腳本為Python語言的高亮&#xff08;這樣保存文本的時候&#xff0c;Notepad也可以自動識別文件類型為.py&…

metasploitable3滲透測試

1、攻擊windows服務器漏洞 用nmap對網段進行掃描nmap -sP 192.168.123 在進行IP掃描 發現Windows服務器漏洞 步驟: msfconsole---進入滲透模塊

以前寫的一個下載小說的工具

因為當時發現只有一個站點有。但是時時聯網的要求太讓人不爽。就寫了一個給全下下來了。 用到了: 1. 正則表達式&#xff0c;分析章節和內容&#xff1b; 2. 線程池下載&#xff0c;并且對下載中的相關超時做了一些處理&#xff1b; 3. 文件生成與寫入&#xff0c;注意格式問題…

數學之路-python計算實戰(14)-機器視覺-圖像增強(直方圖均衡化)

我們來看一個灰度圖像&#xff0c;讓表示灰度出現的次數&#xff0c;這樣圖像中灰度為 的像素的出現概率是是圖像中全部的灰度數&#xff0c; 是圖像中全部的像素數, 實際上是圖像的直方圖&#xff0c;歸一化到 。把 作為相應于 的累計概率函數, 定義為&#xff1a;是圖像的…

Windows2008的安裝

點擊下一步 點擊安裝 選擇第三個&#xff0c;點擊下一步 點擊下一步 點自定義安裝 我在這里分兩個盤并格式化 接下來就是等待安裝完成即可

Ubuntu下在Apache中運行Keystone

最近一次從Github上更新Keystone的代碼后,發現原來bin/keystone-all和bin/keystone-manage都不見了,取而代之的是keystone/cmd/目錄下的all.py和manage.py兩個python腳本.雖然在測試的virtualenv環境下仍然可以執行原來的命令,但是想試著在Apache中運行Keystone,畢竟這已經是社…

redhat linux7.0的安裝

選擇第一個 我選擇中文 點擊開始安裝 設置root用戶密碼 完成如上圖所示 我在網上找了一個redhat7.0鏡像供大家使用 鏈接&#xff1a;https://pan.baidu.com/s/1WhG8BGZTZawDKTNlaAvzRg 提取碼&#xff1a;uzpd

鳥哥

bc計算器 scale4 小數是4位 whatis ls make what is ls --helpman lsman -k passinfo pass [rootcentos01 ~]# ls /etc/init.d/ #服務所在的文件夾 [rootcentos01 ~]# runlevel #查找自己在哪個級別 n 表示上一個沒有N 5-bash-4.1# init 3 #切換到3級別的服務 級別0 關機模式級…