【问题标题】:Want to list all the jobs that were executed manually in SQL Server想要列出在 SQL Server 中手动执行的所有作业
【发布时间】:2019-04-08 15:11:48
【问题描述】:

如何获取上周手动执行的所有作业的列表?

【问题讨论】:

    标签: sql-server sql-job


    【解决方案1】:

    您应该能够从 msdb.dbo.sysjobhistory 表中获取此信息。 访问this link 了解更多信息。

    这是一个示例。希望能帮到你,我的朋友。

    SELECT sj.name,
           sjh.step_name,
           sjh.step_id,
           sjh.run_status,
           STUFF(STUFF(CAST(sjh.run_date as nvarchar(10)),5,0,'.'),8,0,'.') as HistRunDate,
           STUFF(STUFF(RIGHT(REPLICATE('0', 6) +  CAST(sjh.run_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') as HistRunTime,
           STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') as HistRunDuration
           ,sjh.run_status AS JobStatus
    FROM   msdb.dbo.sysjobs           AS sj
           join msdb.dbo.sysjobhistory AS sjh 
                on sjh.job_id = sj.job_id
    WHERE  1=1
    
    AND ((sjh.run_date = 20190401 and sjh.run_time > 200000) 
    or (sjh.run_date = 20190409 and sjh.run_time < 100000))
    
    ORDER BY
           sjh.run_date,
           sjh.run_time
    

    【讨论】:

      【解决方案2】:

      OP 询问如何告知所有作业手动执行。为此,Tomato 的查询应包括对引用“run_requested_source”列的 msdb.dbo.sysjobactivity 的连接。

      来自微软。

      run_requested_source(谁请求运行该作业)

      1 = SOURCE_SCHEDULER
      2 = SOURCE_ALERTER
      3 = SOURCE_BOOT
      4 = SOURCE_USER
      6 = SOURCE_ON_IDLE_SCHEDULE
      
          SELECT sj.name,
             sjh.step_name,
             sjh.step_id,
             sjh.run_status,
             STUFF(STUFF(CAST(sjh.run_date as nvarchar(10)),5,0,'.'),8,0,'.') as HistRunDate,
             STUFF(STUFF(RIGHT(REPLICATE('0', 6) +  CAST(sjh.run_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') as HistRunTime,
             STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') as HistRunDuration
             ,sjh.run_status AS JobStatus
      
      FROM   msdb.dbo.sysjobs           AS sj
             join msdb.dbo.sysjobhistory AS sjh on sjh.job_id = sj.job_id
             join msdb.dbo.sysjobactivity AS sa on sj.job_id = sa.job_id
      WHERE
          (
              ((sjh.run_date = 20190401 and sjh.run_time > 200000) 
              or (sjh.run_date = 20190409 and sjh.run_time < 100000))
          )
          and sa.run_requested_source = 4
      
      ORDER BY
             sjh.run_date,
             sjh.run_time
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多