需求描述

在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等。如果发生异常,需要提前预警的,通知形式一般为发邮件告知。

在上一篇文章中已经分析了SQL SERVER中关于邮件的基础配置,本篇将利用此功能对多台Server的跑批Job进行监控。

本篇实现

1、每天检查服务器中的SQL Server跑批Job的运行状态,如果跑批失败,则发邮件告诉管理员失败的明细

2、解决多台服务器同时检查

监控脚本

首先我们来解决第二个问题,关于多台服务器的问题:

<1>一般监控我们需要监控很多台服务器的JOb,所以对于服务器的量控制我们需要生成一个配置文件。

  1. <computernames>
  2. <computername>
  3. wuxuelei-pc
  4. </computername>
  5. </computernames>

配置文件名字:computername.xml,这样就解决很多服务器的问题,只需要在配置文件中增加就可以,因为我在本地测试,所以就配置了我的本地电脑

<2>利用Power Shell脚本,抓取出每台服务器的Job的状态,并且将Job的运行时间、运行状态、描述以及错误的步骤等信息整理,形成汇总邮件。

脚本如下:

  1. $server = "(local)"
  2. $uid = "sa"
  3. $db="master"
  4. $pwd="password"
  5. $mailprfname = "TestMail"
  6. $recipients = "787449667@qq.com"
  7. $subject = "老大,快去看看这些服务器的Job跑失败了!"
  8. $computernamexml = "F:\PowerShell\发送邮件\computername.xml"
  9.  
  10. function GetServerName($xmlpath)
  11. {
  12. $xml = [xml] (Get-Content $xmlpath)
  13. $return = New-Object Collections.Generic.List[string]
  14. for($i = ;$i -lt $xml.computernames.ChildNodes.Count;$i++)
  15. {
  16. if ( $xml.computernames.ChildNodes.Count -eq )
  17. {
  18. $cp = [string]$xml.computernames.computername
  19. }
  20. else
  21. {
  22. $cp = [string]$xml.computernames.computername[$i]
  23. }
  24. $return.Add($cp.Trim())
  25. }
  26. $return
  27. }
  28.  
  29. function GetAlterCounter($xmlpath)
  30. {
  31. $xml = [xml] (Get-Content $xmlpath)
  32. $return = New-Object Collections.Generic.List[string]
  33. $list = $xml.counters.Counter
  34. }
  35.  
  36. function CreateAlter($message)
  37. {
  38. $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
  39. $CnnString ="Server = $server; Database = $db;User Id = $uid; Password = $pwd"
  40. $SqlConnection.ConnectionString = $CnnString
  41. $CC = $SqlConnection.CreateCommand();
  42. if (-not ($SqlConnection.State -like "Open")) { $SqlConnection.Open() }
  43.  
  44. $cc.CommandText=
  45. " EXEC msdb..sp_send_dbmail
  46. @profile_name = '$mailprfname'
  47. ,@recipients = '$recipients'
  48. ,@body = '$message'
  49. ,@subject = '$subject'
  50. "
  51. $cc.ExecuteNonQuery()|out-null
  52. $SqlConnection.Close();
  53. }
  54.  
  55. $report = ""
  56. $item = New-Object Collections.Generic.List[string]
  57. $names = GetServerName($computernamexml)
  58. foreach($cp in $names)
  59. {
  60. $srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "(local)"
  61. $item=$srv.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and $_.isenabled -eq $TRUE} | select OriginatingServer,name,Description,lastrunoutcome,lastrundate,JobSteps
  62. #Write-Host $item.JobSteps.name
  63. $report += " 服务器:"+$item.OriginatingServer+" Job名称:"+$item.name+" Job描述:"+$item.Description +" Job最后运行状态:"+$item.lastrunoutcome +" Job最后运行时间:"+$item.lastrundate +" Job失败的步骤名称:"+$item.JobSteps.name + "`n"
  64. }
  65. #生产警告
  66. CreateAlter $report

通过上述脚本,生成跑批任务,就可以定时监控多台服务器的Job了。

当然,建议放在所有Job的运行完成之后,进行检测。

上述代码中,有两个技术点:

1、需要自己配置SQL Server邮件代理,具体方法参照我上一篇:点击此

2、需要自己配置跑批计划,方法自己网上搜,很简单。

本篇所监控的Job状态,利用的是上一篇我们创建的Job,跑批肯定失败的。

效果图如下

点击来看一下邮件明细内容:

给出的失败信息还是挺详细的。

另外,因为我只建立了一个失败的Job,所以邮件中只是发送一个条。

其实关于此监控,还有一些状态是可以监控的:

1、比如:可以指定服务器上的部分Job进行监控

2、监控Job的状态:失败或者正常等

以上内容,可以自己根据需要灵活配置。

结语

本篇就列举了一下利用PowerShell实现自动化运维和检测。算作抛砖引玉了吧,自己另有需求可以自己灵活实现。

另外关于Job,一般除了SQL Server的Agent会存在,还有一部分是操作系统的计划任务也需要检测,我们后面的文章解决此问题。

关于SQL Server自动化运维和检测的内容很广泛,其中很多都是从日常的经验中出发,一步步的从手动到自动的过程。

后面的文章,我们将会更深入关于SQL Server的自动化优化运维进行分析。有兴趣的童鞋,可以提前关注。

文章的最后,给出该系列其它的一些监控方式,皆为原创

SQL Server需要监控哪些计数器

SQL Server自动化运维系列——监控性能指标脚本(Power Shell)

SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

如果您看了本篇博客,觉得对您有所收获,请不要吝啬您的“推荐”。

SQL Server自动化运维系列——监控跑批Job运行状态(Power Shell)的更多相关文章

  1. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  2. SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  3. SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  4. SQL Server自动化运维系列——监控性能指标脚本(Power Shell)

    需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...

  5. SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 邮件作为一种非常便利的预警实现方式,在及时性和易用性 ...

  6. SQL Server自动化运维系列——关于数据收集(多服务器数据收集和性能监控)

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  7. SQL Server自动化运维系列 - 多服务器数据收集和性能监控

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  8. SQL Server 自动化运维系列 - 多服务器数据收集和性能监控

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  9. SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)

    需求描述 一般在生产环境中,在投产的情况下,需要批量的来执行SQL脚本文件,来完成整个投产,如果投产文件比较多的情况下,无疑这是一个比较痛苦的过程,所以本篇通过PowerShell脚本来批量完成. 监 ...

随机推荐

  1. Freemark笔记

    Freemark基本语法知识 Freemark 常用代码总结1 Freemark 常用代码总结2 笔记,吐槽一下freemark的蛋疼语法. 1.elseif 中间不能有空格 2.三目运算符 语法和j ...

  2. C#二进制流的序列化和反序列化

    public class BinaryHelper { /// <summary> /// 将对象序列化为byte[] /// 使用IFormatter的Serialize序列化 /// ...

  3. 仿优酷Android客户端图片左右滑动(自动滑动)

    最终效果: 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  4. vue-lazy-render: 延迟渲染大组件,增强页面切换流畅度

    最近用element来做项目,在开发的过程中,突然发现页面的操作和切换在数据量大的时候相当卡,后来提了个issue,在furybean解答后才知道,我每个单元格都加了tooltip,会生成大量的节点, ...

  5. “全能”选手—Django 1.10文档中文版Part4

    第一部分传送门 第二部分传送门 第三部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 2.1 ...

  6. RESTful API测试工具

    Postman Postman是一个Chrome APP,可以直接通过Chrome商店安装(需F墙,推荐修改hosts的方法,简便快捷有效) 其截图如下,非常漂亮 Aoizza Web APP,点击访 ...

  7. MySQL 相关总结

    MySQL 优秀在线教程 RUNOOB-SQL 教程 MySQL 常用命令 导出操作 -- 某数据库 全部表 结构和数据 mysqldump -h192.168.8.152 -uroot -p man ...

  8. nyoj-一笔画问题-欧拉图+联通判定

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  9. CRM(四川网脉系统)项目总结

    CRM系统(四川网脉系统)项目总结 为期八天的四川网脉系统(CRM系统)项目结束了,不管是在做这个项目的过程中还是答辩的过程中都有一些收获,下面对整个项目的开发做一个大致的总结. 一.项目概况 四川网 ...

  10. Laravel [1045] 解决方法 Access denied for user 'homestead'@'localhost'

    这几天学习Laravel框架遇到了数据库方面的问题. PDOException in Connector.php line 55:SQLSTATE[HY000] [1045] Access denie ...