原文:SQL Server 作业监控

在讲解SQLServer Agent Jobs之前,先要讲解msdb。

Msdb是SQLServer的系统数据库之一,用于存储SQLServer的配置、元数据等信息。包括:

l  SQLServer Agent Jobs,Job Steps,Job schedules,Alerts,Operators,等等。

l  Service Broker,Log Shipping,Backups/restore信息,维护计划、数据库邮件、基于策略管理信息等等。

l  SSIS包。

在这部分,主要集中在msdb的以下部分:

l  Job setup/configuration Information

l  Job Execution Information

l  Job Step(s) Setup/Configuration Information

l  Job Step(s) Execution Information

l  Schedule Information

————————————————————————————————————————————————————————————————————————————

SQLServer 允许在Replication,SSIS,存储过程,批处理上创建和执行各种自动化任务。允许使用GUI 或者T-SQL脚本创建。这些信息存储在msdb中。SQL Server Agent Job Setup andConfiguration Information:

可以在SSMS中执行以下脚本查找作业信息:

SELECT  [sJOB].[job_id] AS [作业ID] ,[sJOB].[name] AS [作业名称] ,[sDBP].[name] AS [作业创建者] ,[sCAT].[name] AS [作业种类] ,[sJOB].[description] AS [作业描述] ,CASE [sJOB].[enabled]WHEN 1 THEN '已启用'WHEN 0 THEN '未启用'END AS [是否启用] ,--[sJOB].[date_created] AS [作业创建日期] ,[sJOB].[date_modified] AS [作业最后修改日期] ,[sSVR].[name] AS [作业运行服务器] ,[sJSTP].[step_id] AS [作业起始步骤] ,[sJSTP].[step_name] AS [步骤名称] ,CASE WHEN [sSCH].[schedule_uid] IS NULL THEN '否'ELSE '是'END AS [是否分布式作业] ,[sSCH].[schedule_uid] AS [分布式作业ID] ,[sSCH].[name] AS [用户定义名称] ,CASE [sJOB].[delete_level]WHEN 0 THEN '不删除'WHEN 1 THEN '成功后删除'WHEN 2 THEN '失败后删除'WHEN 3 THEN '完成时删除'END AS [完成时删除作业级别]
FROM    [msdb].[dbo].[sysjobs] AS [sJOB]LEFT JOIN [msdb].[sys].[servers] AS [sSVR] ON [sJOB].[originating_server_id] = [sSVR].[server_id]LEFT JOIN [msdb].[dbo].[syscategories] AS [sCAT] ON [sJOB].[category_id] = [sCAT].[category_id]LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sJSTP] ON [sJOB].[job_id] = [sJSTP].[job_id]AND [sJOB].[start_step_id] = [sJSTP].[step_id]LEFT JOIN [msdb].[sys].[database_principals] AS [sDBP] ON [sJOB].[owner_sid] = [sDBP].[sid]LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [sJOBSCH] ON [sJOB].[job_id] = [sJOBSCH].[job_id]LEFT JOIN [msdb].[dbo].[sysschedules] AS [sSCH] ON [sJOBSCH].[schedule_id] = [sSCH].[schedule_id]
ORDER BY [作业名称]

SQL Server Agent Job Execution Information:

SQLServer同时存放作业执行信息在msdb中。可以执行以下脚本查询作业执行情况:

SELECT  [sJOB].[job_id] AS [作业ID] ,[sJOB].[name] AS [作业名] ,CASE WHEN [sJOBH].[run_date] IS NULLOR [sJOBH].[run_time] IS NULL THEN NULLELSE CAST(CAST([sJOBH].[run_date] AS CHAR(8)) + ' '+ STUFF(STUFF(RIGHT('000000'+ CAST([sJOBH].[run_time] AS VARCHAR(6)),6), 3, 0, ':'), 6, 0, ':') AS DATETIME)END AS [最近执行时间] ,CASE [sJOBH].[run_status]WHEN 0 THEN '失败'WHEN 1 THEN '成功'WHEN 2 THEN '重试'WHEN 3 THEN '取消'WHEN 4 THEN '正在运行' -- In ProgressEND AS [最近执行状态] ,STUFF(STUFF(RIGHT('000000'+ CAST([sJOBH].[run_duration] AS VARCHAR(6)), 6), 3,0, ':'), 6, 0, ':') AS [LastRunDuration (HH:MM:SS)] ,[sJOBH].[message] AS [最近运行状态信息] ,CASE [sJOBSCH].[NextRunDate]WHEN 0 THEN NULLELSE CAST(CAST([sJOBSCH].[NextRunDate] AS CHAR(8)) + ' '+ STUFF(STUFF(RIGHT('000000'+ CAST([sJOBSCH].[NextRunTime] AS VARCHAR(6)),6), 3, 0, ':'), 6, 0, ':') AS DATETIME)END AS [下次运行时间]
FROM    [msdb].[dbo].[sysjobs] AS [sJOB]LEFT JOIN ( SELECT  [job_id] ,MIN([next_run_date]) AS [NextRunDate] ,MIN([next_run_time]) AS [NextRunTime]FROM    [msdb].[dbo].[sysjobschedules]GROUP BY [job_id]) AS [sJOBSCH] ON [sJOB].[job_id] = [sJOBSCH].[job_id]LEFT JOIN ( SELECT  [job_id] ,[run_date] ,[run_time] ,[run_status] ,[run_duration] ,[message] ,ROW_NUMBER() OVER ( PARTITION BY [job_id] ORDER BY [run_date] DESC, [run_time] DESC ) AS RowNumberFROM    [msdb].[dbo].[sysjobhistory]WHERE   [step_id] = 0) AS [sJOBH] ON [sJOB].[job_id] = [sJOBH].[job_id]AND [sJOBH].[RowNumber] = 1
ORDER BY [作业名]

SQL Server Anget Job Steps Setup andconfiguration Information:

在作业系统中,一个作业是有层级的,可以包含一个或多个步骤。

运行以下脚本查看作业步骤信息:

SELECT  [sJOB].[job_id] AS [作业ID] ,[sJOB].[name] AS [作业名] ,[sJSTP].[step_uid] AS [步骤ID] ,[sJSTP].[step_id] AS [步骤序号] ,[sJSTP].[step_name] AS [步骤名] ,CASE [sJSTP].[subsystem]WHEN 'ActiveScripting' THEN 'ActiveX Script'WHEN 'CmdExec' THEN 'Operating system (CmdExec)'WHEN 'PowerShell' THEN 'PowerShell'WHEN 'Distribution' THEN 'Replication Distributor'WHEN 'Merge' THEN 'Replication Merge'WHEN 'QueueReader' THEN 'Replication Queue Reader'WHEN 'Snapshot' THEN 'Replication Snapshot'WHEN 'LogReader' THEN 'Replication Transaction-Log Reader'WHEN 'ANALYSISCOMMAND' THEN 'SQL Server Analysis Services Command'WHEN 'ANALYSISQUERY' THEN 'SQL Server Analysis Services Query'WHEN 'SSIS' THEN 'SQL Server Integration Services Package'WHEN 'TSQL' THEN 'Transact-SQL script (T-SQL)'ELSE sJSTP.subsystemEND AS [作业子系统类型] ,[sPROX].[name] AS [作业运行账号] ,[sJSTP].[database_name] AS [执行数据库名] ,[sJSTP].[command] AS [执行命令] ,CASE [sJSTP].[on_success_action]WHEN 1 THEN 'Quit the job reporting success'WHEN 2 THEN 'Quit the job reporting failure'WHEN 3 THEN 'Go to the next step'WHEN 4THEN 'Go to Step: '+ QUOTENAME(CAST([sJSTP].[on_success_step_id] AS VARCHAR(3)))+ ' ' + [sOSSTP].[step_name]END AS [执行成功后反应] ,[sJSTP].[retry_attempts] AS [失败时的重试次数] ,[sJSTP].[retry_interval] AS [重试间的等待时间 (Minutes)] ,CASE [sJSTP].[on_fail_action]WHEN 1 THEN 'Quit the job reporting success'WHEN 2 THEN 'Quit the job reporting failure'WHEN 3 THEN 'Go to the next step'WHEN 4THEN 'Go to Step: '+ QUOTENAME(CAST([sJSTP].[on_fail_step_id] AS VARCHAR(3)))+ ' ' + [sOFSTP].[step_name]END AS [执行失败后反映]
FROM    [msdb].[dbo].[sysjobsteps] AS [sJSTP]INNER JOIN [msdb].[dbo].[sysjobs] AS [sJOB] ON [sJSTP].[job_id] = [sJOB].[job_id]LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sOSSTP] ON [sJSTP].[job_id] = [sOSSTP].[job_id]AND [sJSTP].[on_success_step_id] = [sOSSTP].[step_id]LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sOFSTP] ON [sJSTP].[job_id] = [sOFSTP].[job_id]AND [sJSTP].[on_fail_step_id] = [sOFSTP].[step_id]LEFT JOIN [msdb].[dbo].[sysproxies] AS [sPROX] ON [sJSTP].[proxy_id] = [sPROX].[proxy_id]
ORDER BY [作业名] ,[步骤序号]

SQL Server Anget Job Steps ExecutionInformation:

在msdb中同样存储了步骤的执行计划,执行以下语句检查:

SELECT  [sJOB].[job_id] AS [作业ID] ,[sJOB].[name] AS [作业名称] ,[sJSTP].[step_uid] AS [步骤ID] ,[sJSTP].[step_id] AS [步骤序号] ,[sJSTP].[step_name] AS [步骤名称] ,CASE [sJSTP].[last_run_outcome]WHEN 0 THEN '失败'WHEN 1 THEN '成功'WHEN 2 THEN '重试'WHEN 3 THEN '取消'WHEN 5 THEN '未知'END AS [上次运行状态] ,STUFF(STUFF(RIGHT('000000'+ CAST([sJSTP].[last_run_duration] AS VARCHAR(6)), 6),3, 0, ':'), 6, 0, ':') AS [LastRunDuration (HH:MM:SS)] ,[sJSTP].[last_run_retries] AS [上次重试次数] ,CASE [sJSTP].[last_run_date]WHEN 0 THEN NULLELSE CAST(CAST([sJSTP].[last_run_date] AS CHAR(8)) + ' '+ STUFF(STUFF(RIGHT('000000'+ CAST([sJSTP].[last_run_time] AS VARCHAR(6)),6), 3, 0, ':'), 6, 0, ':') AS DATETIME)END AS [上次运行时间]
FROM    [msdb].[dbo].[sysjobsteps] AS [sJSTP]INNER JOIN [msdb].[dbo].[sysjobs] AS [sJOB] ON [sJSTP].[job_id] = [sJOB].[job_id]
ORDER BY [作业名称] ,[步骤序号]

SQL Server Agent Job Sechdule Information:

SQLServer允许在特定时间创建各种计划,每个计划能组合成一个或多个SQLServer Agent Jobs。执行以下脚本查询情况:

SELECT  [schedule_uid] AS [作业计划ID] ,[name] AS [作业计划名称] ,CASE [enabled]WHEN 1 THEN '已启用'WHEN 0 THEN '未启用'END AS [是否启用] ,CASE WHEN [freq_type] = 64THEN 'Start automatically when SQL Server Agent starts'WHEN [freq_type] = 128 THEN 'Start whenever the CPUs become idle'WHEN [freq_type] IN ( 4, 8, 16, 32 ) THEN 'Recurring'WHEN [freq_type] = 1 THEN 'One Time'END [作业计划类型] ,CASE [freq_type]WHEN 1 THEN 'One Time'WHEN 4 THEN 'Daily'WHEN 8 THEN 'Weekly'WHEN 16 THEN 'Monthly'WHEN 32 THEN 'Monthly - Relative to Frequency Interval'WHEN 64 THEN 'Start automatically when SQL Server Agent starts'WHEN 128 THEN 'Start whenever the CPUs become idle'END [作业运行频率] ,CASE [freq_type]WHEN 4THEN 'Occurs every ' + CAST([freq_interval] AS VARCHAR(3))+ ' day(s)'WHEN 8THEN 'Occurs every ' + CAST([freq_recurrence_factor] AS VARCHAR(3))+ ' week(s) on '+ CASE WHEN [freq_interval] & 1 = 1 THEN 'Sunday'ELSE ''END + CASE WHEN [freq_interval] & 2 = 2 THEN ', Monday'ELSE ''END+ CASE WHEN [freq_interval] & 4 = 4 THEN ', Tuesday'ELSE ''END + CASE WHEN [freq_interval] & 8 = 8 THEN ', Wednesday'ELSE ''END+ CASE WHEN [freq_interval] & 16 = 16 THEN ', Thursday'ELSE ''END + CASE WHEN [freq_interval] & 32 = 32 THEN ', Friday'ELSE ''END+ CASE WHEN [freq_interval] & 64 = 64 THEN ', Saturday'ELSE ''ENDWHEN 16THEN 'Occurs on Day ' + CAST([freq_interval] AS VARCHAR(3))+ ' of every ' + CAST([freq_recurrence_factor] AS VARCHAR(3))+ ' month(s)'WHEN 32THEN 'Occurs on ' + CASE [freq_relative_interval]WHEN 1 THEN 'First'WHEN 2 THEN 'Second'WHEN 4 THEN 'Third'WHEN 8 THEN 'Fourth'WHEN 16 THEN 'Last'END + ' ' + CASE [freq_interval]WHEN 1 THEN 'Sunday'WHEN 2 THEN 'Monday'WHEN 3 THEN 'Tuesday'WHEN 4 THEN 'Wednesday'WHEN 5 THEN 'Thursday'WHEN 6 THEN 'Friday'WHEN 7 THEN 'Saturday'WHEN 8 THEN 'Day'WHEN 9 THEN 'Weekday'WHEN 10 THEN 'Weekend day'END + ' of every '+ CAST([freq_recurrence_factor] AS VARCHAR(3)) + ' month(s)'END AS [循环间隔] ,CASE [freq_subday_type]WHEN 1THEN 'Occurs once at ' + STUFF(STUFF(RIGHT('000000'+ CAST([active_start_time] AS VARCHAR(6)),6), 3, 0, ':'), 6, 0, ':')WHEN 2THEN 'Occurs every ' + CAST([freq_subday_interval] AS VARCHAR(3))+ ' Second(s) between ' + STUFF(STUFF(RIGHT('000000'+ CAST([active_start_time] AS VARCHAR(6)),6), 3, 0, ':'), 6,0, ':') + ' & '+ STUFF(STUFF(RIGHT('000000'+ CAST([active_end_time] AS VARCHAR(6)), 6),3, 0, ':'), 6, 0, ':')WHEN 4THEN 'Occurs every ' + CAST([freq_subday_interval] AS VARCHAR(3))+ ' Minute(s) between ' + STUFF(STUFF(RIGHT('000000'+ CAST([active_start_time] AS VARCHAR(6)),6), 3, 0, ':'), 6,0, ':') + ' & '+ STUFF(STUFF(RIGHT('000000'+ CAST([active_end_time] AS VARCHAR(6)), 6),3, 0, ':'), 6, 0, ':')WHEN 8THEN 'Occurs every ' + CAST([freq_subday_interval] AS VARCHAR(3))+ ' Hour(s) between ' + STUFF(STUFF(RIGHT('000000'+ CAST([active_start_time] AS VARCHAR(6)),6), 3, 0, ':'), 6, 0,':') + ' & '+ STUFF(STUFF(RIGHT('000000'+ CAST([active_end_time] AS VARCHAR(6)), 6),3, 0, ':'), 6, 0, ':')END [计划运行频率] ,STUFF(STUFF(CAST([active_start_date] AS VARCHAR(8)), 5, 0, '-'), 8, 0,'-') AS [作业启用开始时间] ,STUFF(STUFF(CAST([active_end_date] AS VARCHAR(8)), 5, 0, '-'), 8, 0,'-') AS [作业启用结束时间] ,[date_created] AS [作业创建日期] ,[date_modified] AS [作业上次修改日期]
FROM    [msdb].[dbo].[sysschedules]
ORDER BY [作业计划名称]

SQL Server 作业监控相关推荐

  1. sql server作业_SQL Server作业性能–报告

    sql server作业 描述 (Description) Once collected, job performance metrics can be used for a variety of r ...

  2. sql server作业_在SQL Server中报告作业失败并发出警报

    sql server作业 SQL Server Agent can be used to run a wide variety of tasks within SQL Server. The buil ...

  3. SQL SERVER作业的Schedules浅析

    SQL SERVER作业的计划(Schedules),如果你没仔细研究过或没有应用一些复杂的计划(Schedules),那么你觉得SQL SERVER作业的计划(Schedules)非常好用,也没啥问 ...

  4. SQL server数据库监控

    今天主要介绍LinkSLA智能运维平台对SQL Server数据库的监控. 具体的监控内容如下 第一 .数据库服务器的基本性能监控.包括服务器的CPU数量,内存大小,服务器在线时间,在线数据实例个数, ...

  5. 使用SQL Server作业设置定时任务

    1.开启SQL Server Agent服务 使用作业需要SQL Agent服务的支持,并且需要设置为自动启动,否则你的作业不会被执行. 以下步骤开启服务:开始-->>>运行--&g ...

  6. SQL Server -- 作业(Job) 浅析1

    作业介绍 SQL SERVER的作业是一系列由SQLSERVER代理按顺序执行的指定操作.作业可以执行一系列活动,包括运行Transact-SQL脚本.命令行应用程序.Microsoft Active ...

  7. MS Sql Server 作业编辑报错以及不显示历史记录

    如下图: 解决方法: 1.开始->运行,输入dcomcnfg.exe 2.打开组件服务器->计算机->我的电脑->DCOM配置: 3.找到Microsoft Office Ex ...

  8. SQL Server 任务监控脚本

    为什么80%的码农都做不了架构师?>>>    BEGINDECLARE @jobstatusTABLE(Job_ID uniqueidentifier, Last_Run_Date ...

  9. sql server 作业收缩数据库

    USE[master]GOALTER DATABASE PayFlow2 SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE PayFlow2 SET R ...

最新文章

  1. 开发日记-20190528 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》.desktop创建
  2. Spring MVC 入门笔记
  3. Nginx的官方简介
  4. python中soup_python – 使用带有UTF-8的soup.get_text()
  5. Vaadin附加组件和Maven
  6. Pi network到底怎么样?我们来深入剖析一下
  7. Centos7搭建Ngrok
  8. java applet实例_java applet 一个简单的例子(applet+html)
  9. 在安卓模拟器(mumu为例)上联调app并且用Charles抓包
  10. 7-46 新浪微博热门话题 (30 分)
  11. vscode 中 php 代码格式化插件和其他设置
  12. 如何解决Win10应用商店代码:0x80131500错误
  13. SpringBoot集成EasyExcel的使用
  14. nodejs获取当前连接的网络ip
  15. 一枚钻戒如何成功借势世界杯,与粉丝秀恩爱
  16. NoSQL数据库之Redis(三):常用五大数据类型
  17. 还搞不懂负数怎么用二进制表示?看完这一篇就懂了
  18. Python比较两个日期大小
  19. 人生之路1.20代码 第四部分
  20. Linux 学习网站汇总

热门文章

  1. c语言课程案例设计报告,C语言课程设计报告—范例解读.doc
  2. java 过滤字符串_java实现压缩字符串和java字符串过滤
  3. 一套代码在不同的电脑执行快慢_设计师需要的电脑配置
  4. mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
  5. 昭阳E47A每天第一次开机启动速度慢的原因
  6. Google叫停出售刷脸监控技术,只因目前无法避免被滥用
  7. CNNIC报告:中国网民超8亿,人工智能取得突出成果
  8. 自主芯片+国产系统!天河三号原型机研制完成,中国超算有望重回No.1
  9. 7天速成、免费学习,这套Python入门课我收藏了丨资源帖
  10. 这个机器人花盆,给你的植物长了脚脚