69

特定のジョブが現在 Ms SQL 2008 サーバーで実行されているかどうかを知る必要があります。同時実行の問題につながる可能性のある同じジョブを再度呼び出さないようにします。

4

9 に答える 9

84

msdb.dbo.sysjobactivityジョブが開始されたがまだ完了していないことを意味する、null 以外の start_execution_date と null stop_execution_date を持つレコードをチェックして、を使用できるようです。

これにより、現在実行中のジョブが得られます。

SELECT sj.name
   , sja.*
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
WHERE sja.start_execution_date IS NOT NULL
   AND sja.stop_execution_date IS NULL
于 2013-08-26T14:19:24.803 に答える
16

ジョブが与えられた場合 (名前は知っていると思います)、以下を使用できます。

EXEC msdb.dbo.sp_help_job @Job_name = 'Your Job Name'

MSDN Job Help Procedureで提案されているように。ジョブに関する多くの情報 (所有者、サーバー、ステータスなど) を返します。

于 2013-08-26T15:01:50.950 に答える
2
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'
于 2016-06-27T11:29:43.570 に答える
2
EXECUTE master.dbo.xp_sqlagent_enum_jobs 1,''

[実行中] 列に注目してください。明らかに 1 は現在実行中であることを意味し、[現在のステップ] です。これにより job_id が返されるため、これらを調べる必要があります。

SELECT top 100 *
 FROM   msdb..sysjobs
 WHERE  job_id IN (0x9DAD1B38EB345D449EAFA5C5BFDC0E45, 0xC00A0A67D109B14897DD3DFD25A50B80, 0xC92C66C66E391345AE7E731BFA68C668)
于 2014-07-14T16:19:21.780 に答える