2014-02-06 3 views
2

Я пишу запрос, чтобы найти текущее задание в SQL (я знаю, что мы можем просматривать его в Job Active Monitor, но мне нужно делать в TSQL). Хотя я могу запросить таблицу sysjobactivity, чтобы найти текущее задание, нигде не сообщается, какой этап работы выполняется (потому что моя работа может иметь более 1 шага).SQL - Как найти текущие рабочие шаги по TSQL

запрос я использовал:

SELECT s.name AS [JOB_NAME], 
     '' AS [STEP_ID], 
     '' AS STEP_NAME, 
     'Processing' AS STATUS, 
     sja.run_requested_date AS START_TIME, 
     null AS END_DATE, 
     convert(varchar, (getdate() - sja.run_requested_date), 8) AS Duration 
    FROM sysjobactivity sja, sysjobs s 
WHERE sja.job_id = s.job_id 
    AND sja.run_requested_date > getdate() - 1 
    AND sja.stop_execution_date IS NULL 

Пожалуйста, помогите мне найти имя шаг ID & Шаг, в котором работа в настоящее время прогрессирует.

+0

возможно дубликат [Как я могу определить статус работы?] (Http://stackoverflow.com/questions/200195/how-can-i-determine-the-status-of-a- работа) –

ответ

2

Я думаю, что ниже помощью сценария, чтобы получить SQL Работа с текущей стадии выполнения, попробуйте это

msdb.dbo.sp_help_job @execution_status = 1 
+0

Спасибо Naveen. Я вижу столбец, указанный как current_execution_step, я думаю, его тот, который я ищу. Позвольте мне копать и видеть, из какой таблицы или хранится proc ее извлечены из. Спасибо за предоставленную вами информацию. – user3138788

+0

Приветствия, очень хороший ответ – levi

0
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' 
+0

Добавьте более подробную информацию. – Phiter

0

Попробуйте это:

SELECT distinct 
     cast([sJOB].[job_id] as varchar(max)) AS execution_id 
    , [sJSTP].[step_name] AS executable_name 
    , [sJOB].[name] AS package_name 
    , CASE [sJSTP].[run_date] 
     WHEN 0 THEN NULL 
     ELSE 
      CAST(
       CAST([sJSTP].[run_date] AS CHAR(8)) 
       + ' ' 
       + STUFF(
        STUFF(RIGHT('000000' + CAST([sJSTP].[run_time] AS VARCHAR(6)), 6) 
         , 3, 0, ':') 
        , 6, 0, ':') 
       AS DATETIME) 
     END AS start_time, 
     dateadd(ss, run_duration, CASE [sJSTP].[run_date] 
     WHEN 0 THEN NULL 
     ELSE 
      CAST(
       CAST([sJSTP].[run_date] AS CHAR(8)) 
       + ' ' 
       + STUFF(
        STUFF(RIGHT('000000' + CAST([sJSTP].[run_time] AS VARCHAR(6)), 6) 
         , 3, 0, ':') 
        , 6, 0, ':') 
       AS DATETIME) 
     END) end_time 
-- , [sJSTP].[run_duration] [looptijd in minuten] 
    , CASE [sJSTP].[run_status] 
     WHEN 0 THEN 'Failed' 
     WHEN 1 THEN 'Success' 
     WHEN 2 THEN 'Retry' 
     WHEN 3 THEN 'Cancelled' 
     WHEN 5 THEN 'Unknown' 
     END AS execution_result_description 
FROM 
    [msdb].[dbo].[sysjobhistory] AS [sJSTP] 
    INNER JOIN [msdb].[dbo].[sysjobs] AS [sJOB] 
     ON [sJSTP].[job_id] = [sJOB].[job_id] 
    inner join [msdb].[dbo].[sysjobsteps] steps 
     ON [sJSTP].[job_id] = [steps].[job_id] 
where [sJSTP].[run_date] <> 0 
and CASE [sJSTP].[run_date] 
     WHEN 0 THEN NULL 
     ELSE 
      CAST(
       CAST([sJSTP].[run_date] AS CHAR(8)) 
       + ' ' 
       + STUFF(
        STUFF(RIGHT('000000' + CAST([sJSTP].[run_time] AS VARCHAR(6)), 6) 
         , 3, 0, ':') 
        , 6, 0, ':') 
       AS DATETIME) 
     END between dateadd(hh, -20, getdate()) and getdate() 
and [sJSTP].[step_name] not in ('(Job outcome)') 
order by start_time desc 

Дополнительно я использую этот запрос, чтобы увидеть шаг результат выполняемая работа SSIS. Однако это только показывает завершенные шаги, а не текущие. Мне все еще нужно найти SQL, чтобы увидеть текущий выполняемый шаг и объединить его с этим.

select distinct 
    cast(e.execution_id as varchar(max)), 
    e.executable_name, 
    e.package_name, 
    CONVERT(datetime, es.start_time) AS start_time 
, CONVERT(datetime, es.end_time) AS end_time 
, datediff(mi, es.start_time, es.end_time) [running time] 
, case es.execution_result 
    when 0 then 'Success' 
    when 1 then 'Failed' 
    when 2 then 'Completion' 
    when 3 then 'Cancelled' 
    else cast(es.execution_result as varchar(max)) end as execution_result_description 
from ssisdb.catalog.executables e 
left join ssisdb.catalog.executable_statistics es 
on e.executable_id = es.executable_id 
and e.execution_id = es.execution_id 
order by 6 desc 

 Смежные вопросы

  • Нет связанных вопросов^_^