how to know status of currently running jobs

前端 未结 9 1328
难免孤独
难免孤独 2020-12-24 04:43

I need to know if a given Job is currently running on Ms SQL 2008 server. So as to not to invoke same job again that may lead to concurrency issues.

9条回答
  •  抹茶落季
    2020-12-24 05:11

    DECLARE @StepCount INT
    SELECT @StepCount = COUNT(1)
    FROM msdb.dbo.sysjobsteps
    WHERE job_id = '0523333-5C24-1526-8391-AA84749345666' --JobID
    
    
    SELECT
             [JobName]
            ,[JobStepID]
            ,[JobStepName]
            ,[JobStepStatus]
            ,[RunDateTime]
            ,[RunDuration]
        FROM
        (
            SELECT 
                    j.[name] AS [JobName]
                ,Jh.[step_id] AS [JobStepID]
                ,jh.[step_name] AS [JobStepName]
                ,CASE 
                    WHEN jh.[run_status] = 0 THEN 'Failed'
                    WHEN jh.[run_status] = 1 THEN 'Succeeded'
                    WHEN jh.[run_status] = 2 THEN 'Retry (step only)'
                    WHEN jh.[run_status] = 3 THEN 'Canceled'
                    WHEN jh.[run_status] = 4 THEN 'In-progress message'
                    WHEN jh.[run_status] = 5 THEN 'Unknown'
                    ELSE 'N/A'
                    END AS [JobStepStatus]
                ,msdb.dbo.agent_datetime(run_date, run_time) AS [RunDateTime]
                ,CAST(jh.[run_duration]/10000 AS VARCHAR)  + ':' + CAST(jh.[run_duration]/100%100 AS VARCHAR) + ':' + CAST(jh.[run_duration]%100 AS VARCHAR) AS [RunDuration]
                ,ROW_NUMBER() OVER 
                (
                    PARTITION BY jh.[run_date]
                    ORDER BY jh.[run_date] DESC, jh.[run_time] DESC
                ) AS [RowNumber]
            FROM 
                msdb.[dbo].[sysjobhistory] jh
                INNER JOIN msdb.[dbo].[sysjobs] j
                    ON jh.[job_id] = j.[job_id]
            WHERE 
                j.[name] = 'ProcessCubes' --Job Name
                AND jh.[step_id] > 0
                AND CAST(RTRIM(run_date) AS DATE) = CAST(GETDATE() AS DATE) --Current Date
        ) A
        WHERE 
            [RowNumber] <= @StepCount
            AND [JobStepStatus] = 'Failed'
    

提交回复
热议问题