添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

首先SqlServer的作业(job)是定期执行某个语句或者存储过程的任务,类似于windows里面的执行计划。
作业是在SqlServer代理里面,如下面的截图:
这里写图片描述

关于具体如何创建作业,网上资料太多,这里不再概述。 下面说的是查询所有作业的sql

查询作业基本信息和作业执行情况

SELECT
    [jop].[job_id] AS '作业唯一标识符'
   ,[jop].[name] AS '作业名称'
   ,[dp].[name] AS '作业创建者'
   ,[cat].[name] AS '作业类别'
   ,[jop].[description] AS '作业描述'
   , CASE [jop].[enabled]
        WHEN 1 THEN '是'
        WHEN 0 THEN '否'
      END AS '是否启用'
   ,[jop].[date_created] AS '作业创建日期'
   ,[jop].[date_modified] AS '作业最后修改日期'
   ,[sv].[name] AS '作业运行服务器名称'
   ,[step].[step_id] AS '作业起始步骤'
   ,[step].[step_name] AS '步骤名称'
   , CASE
        WHEN [sch].[schedule_uid] IS NULL THEN '否'
          ELSE '是'
      END AS '是否分布式作业'
   ,[sch].[schedule_uid] AS '作业计划的唯一标识符'
   ,[sch].[name] AS '作业计划的用户定义名称'
   , CASE [jop].[delete_level]
        WHEN 0 THEN '不删除'
        WHEN 1 THEN '成功后删除'
        WHEN 2 THEN '失败后删除'
        WHEN 3 THEN '完成后删除'
      END AS '作业完成删除选项'
FROM [msdb].[dbo].[sysjobs] AS [jop]
LEFT JOIN [msdb].[sys].[servers] AS [sv]
         ON [jop].[originating_server_id] = [sv].[server_id]
LEFT JOIN [msdb].[dbo].[syscategories] AS [cat]
         ON [jop].[category_id] = [cat].[category_id]
LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [step]
         ON [jop].[job_id] = [step].[job_id]
            AND [jop].[start_step_id] = [step].[step_id]
LEFT JOIN [msdb].[sys].[database_principals] AS [dp]
         ON [jop].[owner_sid] = [dp].[sid]
LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [jsch]
         ON [jop].[job_id] = [jsch].[job_id]
LEFT JOIN [msdb].[dbo].[sysschedules] AS [sch]
         ON [jsch].[schedule_id] = [sch].[schedule_id]
ORDER BY [jop].[name]

作业最后执行情况

SELECT
    [job].[job_id] AS '作业唯一标识符'
   ,[job].[name] AS '作业名称'
   ,[jobstep].[step_uid] AS '步骤唯一标识符'
   ,[jobstep].[step_id] AS '步骤编号'
   ,[jobstep].[step_name] AS '步骤名称'
   ,CASE [jobstep].[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 [jobstep].[subsystem]
    END AS '作业步骤类型'
   ,CASE
        WHEN [px].[name] IS NULL THEN 'SQL SERVER代理服务账户'
        ELSE [px].[name]
    END AS '步骤运行账户'
   ,[jobstep].[database_name] AS '执行数据库名'
   ,[jobstep].[command] AS '执行命令'
   ,CASE [jobstep].[on_success_action]
      WHEN 1 THEN '退出报表成功的作业'
      WHEN 2 THEN '退出报告失败的作业'
      WHEN 3 THEN '转到下一步'
      WHEN 4
      THEN '转到步骤: '
           + QUOTENAME(CAST([jobstep].[on_success_step_id] AS VARCHAR(3))) + ' '
           + [sOSSTP].[step_name]
    END AS '执行成功后操作'
   ,[jobstep].[retry_attempts] AS '失败时的重试次数'
   ,[jobstep].[retry_interval] AS '重试间的等待时间(分钟)'
   ,CASE [jobstep].[on_fail_action]
      WHEN 1 THEN '退出报告成功的作业'
      WHEN 2 THEN '退出报告失败的作业'
      WHEN 3 THEN '转到下一步'
      WHEN 4
      THEN '转到步骤: '
           + QUOTENAME(CAST([jobstep].[on_fail_step_id] AS VARCHAR(3))) + ' '
           + [sOFSTP].[step_name]
    END AS '执行失败后操作'
FROM [msdb].[dbo].[sysjobsteps] AS [jobstep]
INNER JOIN [msdb].[dbo].[sysjobs] AS [job]
        ON [jobstep].[job_id] = [job].[job_id]
LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sOSSTP]
        ON [jobstep].[job_id] = [sOSSTP].[job_id]
           AND [jobstep].[on_success_step_id] = [sOSSTP].[step_id]
LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sOFSTP]
        ON [jobstep].[job_id] = [sOFSTP].[job_id]
           AND [jobstep].[on_fail_step_id] = [sOFSTP].[step_id]
LEFT JOIN [msdb].[dbo].[sysproxies] AS [px]--代理账户信息
        ON [jobstep].[proxy_id] = [px].[proxy_id]
        WHERE [jobstep].[database_name]='数据库的名称'
         AND UPPER([jobstep].[command]) LIKE UPPER('%执行的命令名称%')
ORDER BY [job].[name], [jobstep].[step_id]

查看每个作业步骤基本信息

SELECT
    [job].[job_id] AS '作业唯一标识符'
   ,[job].[name] AS '作业名称'
   ,[jobstep].[step_uid] AS '作业步骤唯一标识符'
   ,[jobstep].[step_id] AS '步骤编号'
   ,[jobstep].[step_name] AS '步骤名称'
   ,CASE [jobstep].[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([jobstep].[last_run_duration] AS VARCHAR(6)), 6), 3,
                0, ':'), 6, 0, ':') AS [LastRunDuration (HH:MM:SS)]
   ,[jobstep].[last_run_retries] AS '上次运行重复执行次数'
   ,CASE [jobstep].[last_run_date]
      WHEN 0 THEN NULL
      ELSE CAST(CAST([jobstep].[last_run_date] AS CHAR(8)) + ' '
      + STUFF(STUFF(RIGHT('000000'+ CAST([jobstep].[last_run_time] AS VARCHAR(6)),6), 3, 0, ':'), 6, 0, ':') AS DATETIME)
    END AS '上次运行时间'
FROM [msdb].[dbo].[sysjobsteps] AS [jobstep]
INNER JOIN [msdb].[dbo].[sysjobs] AS [job]
        ON [jobstep].[job_id] = [job].[job_id]
            WHERE [jobstep].[database_name]='数据库的名称'
         AND UPPER([jobstep].[command]) LIKE UPPER('%执行的命令名称%')
ORDER BY [job].[name], [jobstep].[step_id]
XXL- JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用. http://www.xuxueli.com/xxl- job /#/ 但该项目官方版的数据库使用的是my sql ,里面的 sql 都是基于my sql 写的,本人花了半天时间修改为 Sql Server 版的,目前测试可用没抛异常。 xxl- job -admin 版本为2.0.2 Sql Server 版本为2012
在我们的生产环境中,大部分 情况 下需要有自己的运维体制,包括自己健康状态的检测等。如果发生异常,需要提前预警的,通知形式一般为发邮件告知。   在上一篇文章中已经分析了 SQL SERVER 中关于邮件的基础配置,本篇将利用此功能对多台 Server 的跑批 Job 进行监控。   1、每天检查服务器中的 SQL Server 跑批 Job 的运行状态,如果跑批失败,则发邮件告诉管理员失败的明细   2、解决多台服务器同时检查   首先我们来解决第二个问题,关于多台服务器的问题:   一般监控我们需要监控很多台服务器的 JOb ,所以对于服务器的量控制我们
SQL Server 日常需求处理中,会遇到定时 执行 或统计数据的需求,这时我们可以通过 作业 ( JOB )来处理,从而通过代理的方式来实现数据的自动处理。一下为 SQL Server 中创建 作业 的脚本,供大家参考使用。 一、创建 作业 ( JOB ) -- SQL SERVER 2000 作业 ( JOB )T- SQL 创建脚本-- author: jiajia-- 服务器: (local) -- 参数 说明:-...
在将源 SQL Server 数据库服务器中的所有 Job 作业 )迁移至目标数据库服务器的过程中,需要先将这些 Job 导出为 SQL 脚本。 操作步骤: 1、在Microsoft SQL Server Management Studio中,选择 SQL Server Agent-> Job s,按F7打开Object Explorer Details窗口,选中所有 Job ; 2、点击鼠标...
要调用 SQL Server 作业 Job ),可以使用 SQL Server Management Studio(SSMS)界面或 Transact- SQL (T- SQL )脚本。 使用 SSMS 调用 作业 的步骤如下: 1. 打开 SQL Server Management Studio; 2. 连接到要调用 作业 SQL Server 实例; 3. 在“对象资源管理器”窗格中展开“ SQL Server 代理”节点,然后展开“ 作业 ”节点; 4. 找到要调用的 作业 ,右键单击该 作业 ,选择“启动”; 5. 在“启动 作业 ”对话框中,选择要使用的“步骤”,并指定必要的“ 参数 ”; 6. 单击“确定”按钮, 作业 将被启动。 使用 T- SQL 脚本调用 作业 的步骤如下: 1. 打开 SQL Server Management Studio; 2. 连接到要调用 作业 SQL Server 实例; 3. 打开新的 查询 窗口; 4. 编写 T- SQL 脚本,使用“sp_start_ job ”存储过程启动 作业 ,例如: USE msdb; EXEC sp_start_ job N' Job _Name'; 其中,“ Job _Name”是要启动的 作业 的名称; 5. 单击“ 执行 ”按钮,脚本将被 执行 作业 将被启动。 注意:在 执行 T- SQL 脚本之前,需要确保当前用户拥有 执行 作业 的权限。