需求描述html
在咱們的生產環境中,大部分狀況下須要有本身的運維體制,包括本身健康狀態的檢測等。若是發生異常,須要提早預警的,通知形式通常爲發郵件告知。服務器
在上一篇文章中已經分析了SQL SERVER中關於郵件的基礎配置,本篇將利用此功能對多臺Server的跑批Job進行監控。運維
本篇實現性能
一、天天檢查服務器中的SQL Server跑批Job的運行狀態,若是跑批失敗,則發郵件告訴管理員失敗的明細測試
二、解決多臺服務器同時檢查優化
監控腳本ui
首先咱們來解決第二個問題,關於多臺服務器的問題:spa
<1>通常監控咱們須要監控不少臺服務器的JOb,因此對於服務器的量控制咱們須要生成一個配置文件。操作系統
<computernames>
<computername>
wuxuelei-pc </computername> </computernames>
配置文件名字:computername.xml,這樣就解決不少服務器的問題,只須要在配置文件中增長就能夠,由於我在本地測試,因此就配置了個人本地電腦代理
<2>利用Power Shell腳本,抓取出每臺服務器的Job的狀態,而且將Job的運行時間、運行狀態、描述以及錯誤的步驟等信息整理,造成彙總郵件。
腳本以下:
$server = "(local)" $uid = "sa" $db="master" $pwd="password" $mailprfname = "TestMail" $recipients = "787449667@qq.com" $subject = "老大,快去看看這些服務器的Job跑失敗了!" $computernamexml = "F:\PowerShell\發送郵件\computername.xml" function GetServerName($xmlpath) { $xml = [xml] (Get-Content $xmlpath) $return = New-Object Collections.Generic.List[string] for($i = 0;$i -lt $xml.computernames.ChildNodes.Count;$i++) { if ( $xml.computernames.ChildNodes.Count -eq 1) { $cp = [string]$xml.computernames.computername } else { $cp = [string]$xml.computernames.computername[$i] } $return.Add($cp.Trim()) } $return } function GetAlterCounter($xmlpath) { $xml = [xml] (Get-Content $xmlpath) $return = New-Object Collections.Generic.List[string] $list = $xml.counters.Counter } function CreateAlter($message) { $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $CnnString ="Server = $server; Database = $db;User Id = $uid; Password = $pwd" $SqlConnection.ConnectionString = $CnnString $CC = $SqlConnection.CreateCommand(); if (-not ($SqlConnection.State -like "Open")) { $SqlConnection.Open() } $cc.CommandText= " EXEC msdb..sp_send_dbmail @profile_name = '$mailprfname' ,@recipients = '$recipients' ,@body = '$message' ,@subject = '$subject' " $cc.ExecuteNonQuery()|out-null $SqlConnection.Close(); } $report = "" $item = New-Object Collections.Generic.List[string] $names = GetServerName($computernamexml) foreach($cp in $names) { $srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "(local)" $item=$srv.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and $_.isenabled -eq $TRUE} | select OriginatingServer,name,Description,lastrunoutcome,lastrundate,JobSteps #Write-Host $item.JobSteps.name $report += " 服務器:"+$item.OriginatingServer+" Job名稱:"+$item.name+" Job描述:"+$item.Description +" Job最後運行狀態:"+$item.lastrunoutcome +" Job最後運行時間:"+$item.lastrundate +" Job失敗的步驟名稱:"+$item.JobSteps.name + "`n" } #生產警告 CreateAlter $report
經過上述腳本,生成跑批任務,就能夠定時監控多臺服務器的Job了。
固然,建議放在全部Job的運行完成以後,進行檢測。
上述代碼中,有兩個技術點:
一、須要本身配置SQL Server郵件代理,具體方法參照我上一篇:點擊此;
二、須要本身配置跑批計劃,方法本身網上搜,很簡單。
本篇所監控的Job狀態,利用的是上一篇咱們建立的Job,跑批確定失敗的。
效果圖以下
點擊來看一下郵件明細內容:
給出的失敗信息仍是挺詳細的。
另外,由於我只創建了一個失敗的Job,因此郵件中只是發送一個條。
其實關於此監控,還有一些狀態是能夠監控的:
一、好比:能夠指定服務器上的部分Job進行監控
二、監控Job的狀態:失敗或者正常等
以上內容,能夠本身根據須要靈活配置。
結語
本篇就列舉了一下利用PowerShell實現自動化運維和檢測。算做拋磚引玉了吧,本身另有需求能夠本身靈活實現。
另外關於Job,通常除了SQL Server的Agent會存在,還有一部分是操做系統的計劃任務也須要檢測,咱們後面的文章解決此問題。
關於SQL Server自動化運維和檢測的內容很普遍,其中不少都是從平常的經驗中出發,一步步的從手動到自動的過程。
後面的文章,咱們將會更深刻關於SQL Server的自動化優化運維進行分析。有興趣的童鞋,能夠提早關注。
文章的最後,給出該系列其它的一些監控方式,皆爲原創
SQL Server自動化運維繫列——監控性能指標腳本(Power Shell)
SQL Server自動化運維繫列——監控磁盤剩餘空間及SQL Server錯誤日誌(Power Shell)
SQL Server自動化運維繫列——關於郵件通知那點事(.Net開發人員的福利)
若是您看了本篇博客,以爲對您有所收穫,請不要吝嗇您的「推薦」。