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 NULL
OR [sJOBH].[run_time] IS NULL THEN NULL
ELSE 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 Progress
END 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 NULL
ELSE 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 RowNumber
FROM [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:
在作业系统中,一个作业是有层级的,可以包含一个或多个步骤。
运行以下脚本查看作业步骤信息:

[sql] view plaincopyprint?
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.subsystem
END 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 4
THEN '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 4
THEN '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中同样存储了步骤的执行计划,执行以下语句检查:


[sql] view plaincopyprint?
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 NULL
ELSE 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。执行以下脚本查询情况:
[sql] view plaincopyprint?
SELECT [schedule_uid] AS [作业计划ID] ,
[name] AS [作业计划名称] ,
CASE [enabled]
WHEN 1 THEN '已启用'
WHEN 0 THEN '未启用'
END AS [是否启用] ,
CASE WHEN [freq_type] = 64
THEN '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 4
THEN 'Occurs every ' + CAST([freq_interval] AS VARCHAR(3))
+ ' day(s)'
WHEN 8
THEN '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 ''
END
WHEN 16
THEN 'Occurs on Day ' + CAST([freq_interval] AS VARCHAR(3))
+ ' of every ' + CAST([freq_recurrence_factor] AS VARCHAR(3))
+ ' month(s)'
WHEN 32
THEN '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 1
THEN 'Occurs once at ' + STUFF(STUFF(RIGHT('000000'
+ CAST([active_start_time] AS VARCHAR(6)),
6), 3, 0, ':'), 6, 0, ':')
WHEN 2
THEN '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 4
THEN '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 8
THEN '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 [作业计划名称]


转自:http://blog.csdn.net/dba_huangzj/article/details/7608844
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值