工作這么多年了,無論是身邊的同學還是同事,發現只要搞程序員的都有一個通病---懶。懶到誰都不願意加班,尤其是"義務"加班。即使大家都不願意加班,但是很多時候項目趕着上線或者上線之后出錯啊什么的,總得有人看着,這時候就誕生了一種新的工作制度,叫做7*24。顧名思義就是這種崗位實時都得有人看着,這確實是一件讓人頭疼的事情。雖然說在項目剛上線不可避免的得有7*24,但是我們可以盡量減少7*24的工作量(ps:因為7*24確實太累太苦,別問我怎么知道的)。那么我們怎么減少7*24的工作量呢?這就是我們這篇博文需要介紹到的,Sql server之警報管理。

本博文中部分內容根據《Microsoft sql server》翻譯再加上自己的理解而來。
MS SQL SERVER自動將發生的事情記錄在Windows的程序日志中。SQL SERVER AGENT會自動監視由SQL SERVER記錄的程序執行日志,如果找到符合定義的Action發生,將拉響響應事件的警報。 SQL SERVER主要監視以下幾類事情:
- SQL SERVER事件
- 服務器/數據庫性能條件
- Windows management instrument事件(下文中簡稱:WMI)
警報對應上述3種事件,當事件發生時,將自動觸發對應的事件。警報由名稱、觸發警報的時間或者性能條件、SQL SERVER代理響應事件或者性能條件所執行的操作這3個部分來完成。一個基本的警報包含以下內容:
SQL SERVER中大約有3000個可能出現的錯誤(SQL SERVER常見錯誤),每個錯誤都有自己的編號。在很多情況下程序開發可能產生不可預知的錯誤,在這些情況下,我們就需要New自定義錯誤號,並且針對這個事件產生一個警報
程序里面,任何錯誤都是有Priority的,SQL SERVER中的每一個錯誤都有一個關聯的嚴重級別,通過這個級別可以指示錯誤的挺嚴重性,可以按照不同的級別產生不同的警報。(這個道理很好懂的,拿原子彈炸老鼠(小題大做)的事情咱不干)
數據庫用戶可以從性能計數器中產生的相對應的警報,這些計數器對於用戶數據庫的各種性能具有良好的效果。

要創建不同級別的警報,就必須得將錯誤寫到Windows時間日志中。這個不難理解。因為在警報概念部分我們已經說了,SQL SERVER代理是從事件日志上讀取錯誤信息。當SQL SERVER代理讀取了事件日志並在此發現了新錯誤時,就會搜索整個數據庫來尋找相應的警報。一旦SQL SERVER代理發現了Match的警報,將立即激活該警報,從而通知相關人員或者根據Job的設定來做出相應的反應。
下面我們就依次創建事件警報/性能警報/WMI警報
① 打開Sql Server Management Studio窗口,找到警報節點,如圖
② 點擊New Alert(創建警報)
③ 選擇[Response]標簽頁,如下圖所示,可以設定發生警報時向哪些操作員進行通知。單機[New Operator]按鈕,可以完成添加警報通知的操作員
④ 選擇[Options]標簽頁,如下圖所示,可以設定警報錯誤發送的方式,可以選擇[E-mail]、[Pager]、[Net send]復選框(可多選),同時可以填寫在發送警報的同時給出的通知消息,並能夠對響應的間隔時間進行設定。
⑤ 完成屬性設置后,單機[OK]按鈕完成警報的創建工作
在性能警報創建頁面,可以完成以下設置:
- 在[Object]下拉框中可以設置性能警報針對的對象,like: 選擇[Sql Server Database]選項設定性能警報針對的數據庫
- 通過[Counter]下拉框設置性能計數器的計數方式
- 通過[Instance]下拉框設置性能計數器針對的數據庫實例
- 通過[Alert if counter]下拉框設置性能計數器觸發的條件
接下來,就如同創建事件警報的步驟一樣,設置[Response]標簽頁和[Options]標簽頁,完成設置后,單機[OK]按鈕完成警報的創建工作
WMI警報幫助用戶對本地和遠程計算機進行管理。WMI通過編程和腳本語言為日常管理提供了一條連續一致的途徑,用戶通過WMI警報可以完成以下任務:
- 在[Object]下拉框中可以設置性能警報針對的對象,like: 選擇[Sql Server Database]選項設定性能警報針對的數據庫
- 遠程啟動計算機或在遠程計算機上啟動一個進程
- 設定在特定日期和時間運行的進程
- 獲得本地或遠程計算機已安裝的程序列表
- 查詢本地或遠程計算機的Windsows事件日志
WMI警報的創建和事件警報/性能警報創建類似,在[New Alert]窗口的[Type]下拉列表中選擇[WMI event alert]選項,如下圖所示
使用[Namespace]文本框的默認值\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER,在[Query]文本框中輸入如下語句:
SELECT * FROM DDL_DATABASE_LEVEL_EVENT WHERE Database='Test'
到此,Sql Server警報管理就介紹完畢了。
在此,借助博客園這個平台,向那些奮斗在7*24的前線程序猿們獻上最崇高的敬意。
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!