SQLServer代理中如何給操作員發(fā)送事件警報(bào)郵件
SQL Server代理是所有實(shí)時(shí)數(shù)據(jù)庫的核心。代理有很多不明顯的用法,因此系統(tǒng)的知識(shí),對(duì)于開發(fā)人員還是DBA都是有用的。這系列文章會(huì)通俗介紹它的很多用法。
前言
如我們?cè)谶@個(gè)系列的文章里所見,SQL Server代理作業(yè)由一些列的作業(yè)步驟組成,每個(gè)步驟是需要執(zhí)行的不同類型工作。另外在每個(gè)步驟里要進(jìn)行的工作,你會(huì)發(fā)送特定作業(yè)成功或失敗的消息給DBA(或其他人) 。當(dāng)系統(tǒng)發(fā)生故障時(shí),特定性能問題發(fā)生或某個(gè)閥值達(dá)到系統(tǒng)值時(shí),你也會(huì)對(duì)這些消息感興趣。SQL Server代理提供創(chuàng)建警報(bào)的能力,可以發(fā)消息給指定的操作員作為提胸,來幫助你處理這些問題。
什么是SQL Server代理警報(bào)?
SQL Server警報(bào)是在你的SQL Server系統(tǒng)上,對(duì)特定條件的自動(dòng)響應(yīng)。警報(bào)可以由下列條件觸發(fā):
SQL Server系統(tǒng)信息生成最低程度的系統(tǒng)錯(cuò)誤偵測(cè)到在SQL Server性能計(jì)數(shù)器達(dá)到特定閥值符合WMI查詢結(jié)果
一旦警報(bào)觸發(fā),在警報(bào)里定義的響應(yīng)會(huì)發(fā)生。這些響應(yīng)要么執(zhí)行特定的SQL Server代理作業(yè),要么通知一個(gè)或多個(gè)操作員。你也有可以指定觸發(fā)錯(cuò)誤信息的選項(xiàng),包括在任何發(fā)送的提醒里。
什么是SQL Server代理操作員?
SQL Server代理操作可以是簡(jiǎn)單的一個(gè)郵箱地址。也有其他選項(xiàng),例如一個(gè)net send地址或一個(gè)“尋呼機(jī)”郵件名,但事實(shí)上“尋呼機(jī)”選項(xiàng)直接作為郵件發(fā)送。
備注:
對(duì)于SQL Server警報(bào),”Net Send“還是個(gè)選項(xiàng),但實(shí)際上這個(gè)功能并不用,已經(jīng)正式從產(chǎn)品里剝離,意味著在后續(xù)的SQL Server版本里移除。對(duì)于警報(bào)唯一可行的選項(xiàng)是通過郵件提醒。
當(dāng)一個(gè)操作員被定義,你可以使用操作員來接收郵件(例如通過郵件發(fā)送文本信息)到定義的郵件別名。那個(gè)郵件別名會(huì)可能是一組或更多為系統(tǒng)問題待命的DBA。對(duì)于重要的提醒,你會(huì)想要使用升級(jí)的操作員,例如直接發(fā)短信給手機(jī)。
創(chuàng)建一個(gè)操作員
創(chuàng)建一個(gè)操作員,打開SSMS,在SQL Server代理文件夾下找到操作員。右擊【操作員】,選擇【新建操作員】,你會(huì)打開如插圖1的界面。
插圖1——新建操作員對(duì)話框
如你在插圖1所見,我對(duì)操作員已指定了一個(gè)姓名,還有郵件地址。請(qǐng)確保已啟用已經(jīng)選擇,不然對(duì)這個(gè)操作員的任何警報(bào)都不會(huì)發(fā)生。
當(dāng)你選擇了【通知】頁,我們可以看到已經(jīng)分配給這個(gè)操作員的警報(bào)列表。對(duì)新建的操作員,如插圖2所示,列表是空的。點(diǎn)擊【確定】,操作員已經(jīng)創(chuàng)建。
插圖2——新建操作員通知頁
在運(yùn)行的系統(tǒng)上,我們會(huì)期望至少存在2個(gè)操作員——一個(gè)作為緊急系統(tǒng)提醒(例如,我們剛定義的服務(wù)器警報(bào)操作員),另一個(gè)在SQL Server代理作業(yè)或常規(guī)錯(cuò)誤上你會(huì)有的各自分工。
操作員當(dāng)然也可以通過T-SQL腳本來創(chuàng)建。你可以使用sp_add_operator系統(tǒng)存儲(chǔ)過程來創(chuàng)建操作員。語法上的幫助,可以參考在線幫助:https://msdn.microsoft.com/zh-cn/library/ms186747.aspx
備注:
關(guān)于操作員一個(gè)常見的問題是你如何發(fā)送警報(bào)給多個(gè)人。你實(shí)現(xiàn)這個(gè)的方法是通過你的郵件系統(tǒng)的郵件發(fā)布列表,因?yàn)镾QL Server代理只能給單個(gè)操作員發(fā)送警報(bào)。因此你在SQL Server代理可以定義操作員為發(fā)布列表,那么在列表上的每個(gè)人都會(huì)收到相關(guān)的警報(bào)。
防故障(Fail-Safe)操作員
防故障操作員定義為:如果所有其他操作員提醒失敗而啟用的。這樣的失敗有很多的可能(例如,你郵件系統(tǒng)出問題了,這個(gè)在下篇文章我們會(huì)談到),但在任何情況下有一個(gè)防故障操作員比較好。一旦你定義一個(gè)或多個(gè)操作員,你就定義防故障操作員。防故障操作員是你指定的最后一個(gè)聯(lián)系的。
你在SQL Server代理屬性對(duì)話框里定義防故障安全員(右擊SQL Server代理,選擇屬性),在警報(bào)系統(tǒng)頁。勾選啟用防故障操作員,然后從列表里選擇系統(tǒng)已經(jīng)定義的操作員,如插圖3所示。當(dāng)完成選擇后,點(diǎn)擊【確定】。注意這頁的其它選項(xiàng)會(huì)在下一篇的數(shù)據(jù)庫郵件里談到。
插圖3——配置防故障操作員
創(chuàng)建警報(bào)
一些就緒,現(xiàn)在我們可以開始創(chuàng)建警報(bào),我們剛才已經(jīng)提過,是在你的SQL Server系統(tǒng)里對(duì)于一些情況的自動(dòng)響應(yīng)。為了定義一個(gè)新的警報(bào),在SSMS里點(diǎn)擊SQL Server代理文件夾,然后點(diǎn)擊【警報(bào)】文件夾,右擊并選擇【新建警報(bào)】打開新建警報(bào)對(duì)話框。你會(huì)看到如插圖4的對(duì)話框。對(duì)于在系統(tǒng)上的第一個(gè)警報(bào),我們創(chuàng)建一個(gè)提醒DBA任何系統(tǒng)錯(cuò)誤的警報(bào)(嚴(yán)重級(jí)別19或更高)。
插圖4——創(chuàng)建新的警報(bào)
SQL Server事件警報(bào)
和操作員一樣,警報(bào)必須啟用才會(huì)工作。注意在這個(gè)例子里,警報(bào)的”類型“是”SQL Server事件警報(bào)“。你也可以選擇”SQL Server 性能條件警報(bào)“,它會(huì)提供對(duì)于關(guān)聯(lián)的SQL Server實(shí)例,會(huì)看到很多SQL Server特定的性能計(jì)數(shù)器。在下一部分,我們會(huì)看到一個(gè)性能條件警報(bào)。最后,還有一個(gè)”WMI事件警報(bào)“,允許你寫WMI查詢并用警報(bào)響應(yīng)它們。關(guān)于WMI你可以在在線幫助里進(jìn)一步學(xué)習(xí):https://msdn.microsoft.com/en-us/library/aa394582%28v=VS.85%29.aspx
在新建警報(bào)對(duì)話框里的下拉框里的嚴(yán)重級(jí)別只是對(duì)于SQL Server所有可能錯(cuò)誤的可用嚴(yán)重級(jí)別(查看RAISERROR命令文檔來了解更多:https://msdn.microsoft.com/zh-cn/library/ms178592.aspx )這些在19或更高級(jí)別的錯(cuò)誤,需要DBA干預(yù)調(diào)查為什么會(huì)發(fā)生這個(gè)級(jí)別的錯(cuò)誤。
一旦你選擇了如插圖4所示界面的選項(xiàng),點(diǎn)擊【響應(yīng)】來查看對(duì)這個(gè)警報(bào)可以采取的行動(dòng)(如插圖5所示)。你會(huì)可能到你可以執(zhí)行一個(gè)SQL Server代理作業(yè),或通知一個(gè)操作員(例如,我們剛才定義的操作員)。在這個(gè)例子里,我們選擇給我們的”服務(wù)器警報(bào)“發(fā)送一個(gè)郵件,當(dāng)警報(bào)發(fā)生的時(shí)候。
插圖5——新建警報(bào)響應(yīng)
選擇想要的操作員后,你可以切換到【選項(xiàng)】頁看下對(duì)一個(gè)這個(gè)警報(bào)一些有趣的選擇,如插圖6所示。選擇包含警告信息的選項(xiàng),如果你想知道為什么這個(gè)警報(bào)被發(fā)送(不然的話很難理解警報(bào)為什么會(huì)發(fā)送)。這個(gè)頁面也允許你指定額外的提醒信息,非常用于在早上3點(diǎn)提醒你,為什么你會(huì)因這個(gè)信息而醒來,或作為幫助的搜素字符,當(dāng)查看來子SQL Server的郵件時(shí)。如果這個(gè)是普通的警報(bào)條件,你可以只選擇默認(rèn)提醒信息不需要額外你專有的備注。
延遲選項(xiàng)用來指定當(dāng)警報(bào)觸發(fā)時(shí),是否需要重復(fù)提醒,可以指定幾分鐘或幾秒。在這個(gè)例子里,5分鐘的延遲已經(jīng)設(shè)置,因此你的郵箱收件箱會(huì)持續(xù)收到一些列的郵件,所有都提示同樣的問題。
插圖6——新建報(bào)警選項(xiàng)
當(dāng)你完成對(duì)這個(gè)對(duì)話框的選擇,點(diǎn)擊【確定】來創(chuàng)建新的警報(bào)。
當(dāng)然你也可以通過sp_add_alert的系統(tǒng)存儲(chǔ)過程來創(chuàng)建。關(guān)于這個(gè)存儲(chǔ)過程的文檔在這里:https://msdn.microsoft.com/zh-cn/library/ms189531.aspx 或者直接從SSMS里創(chuàng)建,如插圖7所示。
插圖7——通過腳本新建一個(gè)警報(bào)
警報(bào)條款
有意思的是你可以指定特定的錯(cuò)誤信息從不觸發(fā)。為了定義這樣的錯(cuò)誤,你必須人為更新服務(wù)器上的注冊(cè)表。注冊(cè)表是你特定實(shí)例上的。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER下,你會(huì)找到SQLServerAgent,如插圖8所示。
插圖8:注冊(cè)表編輯器配置NonAlertableErrors
默認(rèn)情況下,錯(cuò)誤號(hào)是1204(不能獲得鎖)和4002(登錄失敗)。如果你真的想要這些錯(cuò)誤號(hào)的警報(bào),你會(huì)需要編輯下這個(gè)鍵值,從列表里移除這些數(shù)字。相反的,你可以增加額外的從不警告錯(cuò)誤號(hào),你可以加這些錯(cuò)誤號(hào)到列表。
當(dāng)然,當(dāng)你編輯注冊(cè)表時(shí),這些不正常的警告號(hào)你要特別仔細(xì)。
性能條件警報(bào)
警報(bào)的第2個(gè)類型是 SQL Server性能條件警報(bào)。你可以給予性能計(jì)數(shù)器配置很多種類的警報(bào)。遺憾的是,你只能設(shè)置SQL Server的計(jì)數(shù)器,但這已經(jīng)能讓你自動(dòng)監(jiān)控你的系統(tǒng)。例如,在插圖9里,當(dāng)AdvantureWorks數(shù)據(jù)庫的事務(wù)日志超過90%滿時(shí),你后收到警告的警報(bào)。一但你選擇如插圖4的選項(xiàng),點(diǎn)擊【響應(yīng)】頁來配置對(duì)這個(gè)警報(bào)對(duì)應(yīng)采取的行動(dòng)(如插圖5所示)。你會(huì)看到你可以執(zhí)行SQL Server代理作業(yè)(例如剛才提到的日志空間增長(zhǎng),或開始備份數(shù)據(jù)庫),或提醒對(duì)應(yīng)的操作員(例如我們剛才定義的操作員)。在這個(gè)例子里,當(dāng)警報(bào)觸發(fā)的時(shí)候,我們選擇給“服務(wù)器警報(bào)”操作發(fā)送郵件。
插圖9:性能條件警報(bào)
警報(bào)系統(tǒng)進(jìn)階
除了這篇文章里創(chuàng)建的高嚴(yán)重級(jí)別的警報(bào),你應(yīng)該研究下警報(bào)的其他方面。在性能計(jì)數(shù)器和WMI查詢上設(shè)置警報(bào)功能就非常強(qiáng)大。當(dāng)然這里只限制SQL Server特定的計(jì)數(shù)器,沒有例如CPU這樣的系統(tǒng)計(jì)數(shù)器。這個(gè)要注意,你還是設(shè)置這樣的警報(bào),當(dāng)SQL Server登錄到特定的閾值,或達(dá)到SQL Server特定的內(nèi)存條件,或當(dāng)超過I/O閾值時(shí)。
在所有的SQL Server系統(tǒng)中至少要配置一個(gè)操作員。這會(huì)保證對(duì)于大多數(shù)嚴(yán)重錯(cuò)誤,一些特定的提醒會(huì)發(fā)給你。當(dāng)然,發(fā)送郵件警報(bào)的話需要SQL Server能發(fā)送郵件警報(bào)。另外,當(dāng)警報(bào)觸發(fā)時(shí)可以執(zhí)行作業(yè)意味著你可以通過自動(dòng)化操作修正很多常規(guī)錯(cuò)誤,而不需要每次都人為干預(yù)錯(cuò)誤發(fā)生。對(duì)于要執(zhí)行的作業(yè)沒有特定的要求:任何SQL Server代理作業(yè)都會(huì)被調(diào)用。
到此這篇關(guān)于SQLServer代理中如何給操作員發(fā)送事件警報(bào)郵件的文章就介紹到這了,更多相關(guān)SQLServer給操作員發(fā)郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL學(xué)習(xí)筆記三 select語句的各種形式小結(jié)
SQL學(xué)習(xí)筆記三 select語句的各種形式小結(jié),大家可以查看下select命名的使用。2011-08-08sql導(dǎo)入.back文件的實(shí)現(xiàn)
本文主要介紹了sql導(dǎo)入.back文件的實(shí)現(xiàn),.back文件是一種備份文件,其中包含了數(shù)據(jù)庫的結(jié)構(gòu)和數(shù)據(jù),然后通過執(zhí)行一系列的SQL命令,可以還原備份文件到數(shù)據(jù)庫中,感興趣的可以了解一下2023-11-11Sql Server 存儲(chǔ)過程調(diào)用存儲(chǔ)過程接收輸出參數(shù)返回值
這篇文章主要介紹了Sql Server 存儲(chǔ)過程調(diào)用存儲(chǔ)過程接收輸出參數(shù)返回值,需要的朋友可以參考下2017-06-06在安裝了Sql2000的基礎(chǔ)上安裝Sql2005的詳細(xì)過程 圖文
在安裝了Sql2000的基礎(chǔ)上安裝Sql2005的詳細(xì)過程 圖文方法,需要的朋友可以參考下。2011-03-03SQL Server連接中三個(gè)常見的錯(cuò)誤分析
SQL Server連接中三個(gè)常見的錯(cuò)誤分析...2007-03-03SQL Server 2005 還原數(shù)據(jù)庫錯(cuò)誤解決方法
解決SQL Server 2005 還原數(shù)據(jù)庫錯(cuò)誤:System.Data.SqlClient.SqlError: 在對(duì) 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BusinessDB.mdf' 嘗試 'RestoreContainer::ValidateTargetForCreation' 時(shí),操作系統(tǒng)返回了錯(cuò)誤 '5(拒絕訪問)'2009-03-03如何在SQL Server 2014中用資源調(diào)控器壓制你的存儲(chǔ)?
本文通過一個(gè)非常簡(jiǎn)單的例子介紹了如何利用SQL Server 2014中的資源調(diào)控器(Resource Governor)來壓制你的存儲(chǔ),需要的朋友可以參考下2015-07-07詳解SqlServer 表達(dá)式(expression)
表達(dá)式可以是單個(gè)常量,變量,列或標(biāo)量函數(shù)。運(yùn)算符可用于將兩個(gè)或多個(gè)簡(jiǎn)單表達(dá)式連接到一個(gè)復(fù)雜的表達(dá)式中。這篇文章主要介紹了SqlServer 表達(dá)式(expression)的語法代碼詳解,需要的朋友可以參考下2019-11-11SQLSERVER不拼接SQL如何實(shí)現(xiàn)條件查詢
在做項(xiàng)目中,我們經(jīng)常遇到復(fù)雜的查詢方法,本文主要介紹了SQLSERVER不拼接SQL如何實(shí)現(xiàn)條件查詢,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01