关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server自动化运维系列:监控跑批Job运行状态

    SQL Server自动化运维系列:监控跑批Job运行状态

    2015-05-25 00:00:00 出处:指尖流淌
    分享

    《SQL Server自动化运维系列:监控性能指标脚本》
    《SQL Server自动化运维系列:监控磁盘剩余空间及SQL Server错误日志》
    《SQL Server自动化运维系列:关于邮件通知那点事》
    《SQL Server自动化运维系列:监控跑批Job运行状态》
    《SQL Server自动化运维系列:关于数据收集》

    需求描述

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

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

    该文实现

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

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

    监控脚本

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

    <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的运行完成之后,进行检测。

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

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

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

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

    效果图如下

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

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

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

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

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

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

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

    结语

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

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

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

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

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。