Как определить статус задания?

У меня есть хранимая процедура, которая планирует работу. Это задание занимает много времени, чтобы завершить работу (приблизительно 30-40 минут). Мне нужно узнать статус этого задания. Ниже детали помогут мне

1) Как просмотреть список всех заданий, которые были запланированы на будущее и еще не начались

2) Как просмотреть список выполняемых заданий и временной интервал с момента их запуска

3) Как узнать, успешно ли выполнено задание или остановилось между ними из-за какой-либо ошибки.

sql,sql-server-2005,tsql,stored-procedures,

40

Ответов: 14


43 принят

Вы можете попробовать использовать хранимую процедуру системы sp_help_job. Это возвращает информацию о задании, его шагах, расписаниях и серверах. Например

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

SQL Books Online должен содержать много информации о возвращаемых им записях.

Для возврата информации о нескольких заданиях вы можете попробовать запросить следующие системные таблицы, в которых хранятся различные биты информации о работе

  • msdb.dbo.SysJobs
  • msdb.dbo.SysJobSteps
  • msdb.dbo.SysJobSchedules
  • msdb.dbo.SysJobServers
  • msdb.dbo.SysJobHistory

Их имена достаточно понятны (кроме SysJobServers, которые содержат информацию о том, когда работа была выполнена, и результат).

Опять же, информацию о полях можно найти в MSDN. Например, проверьте страницу для SysJobs


69 ов

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

См. Это для справки: что значит иметь работу с нулевой остановкой?

Вы также можете проверить это, анализируя sp_help_jobactivity процедуру MSDB .

Я понимаю, что это старое сообщение на SO, но я нашел это сообщение лишь частично полезным из-за проблемы.

SELECT
    job.name, 
    job.job_id, 
    job.originating_server, 
    activity.run_requested_date, 
    DATEDIFF( SECOND, activity.run_requested_date, GETDATE() ) as Elapsed
FROM 
    msdb.dbo.sysjobs_view job
JOIN
    msdb.dbo.sysjobactivity activity
ON 
    job.job_id = activity.job_id
JOIN
    msdb.dbo.syssessions sess
ON
    sess.session_id = activity.session_id
JOIN
(
    SELECT
        MAX( agent_start_date ) AS max_agent_start_date
    FROM
        msdb.dbo.syssessions
) sess_max
ON
    sess.agent_start_date = sess_max.max_agent_start_date
WHERE 
    run_requested_date IS NOT NULL AND stop_execution_date IS NULL

27

Это то, что я использую, чтобы получить текущие задания (в основном, чтобы я мог убить те, которые, вероятно, зависали):

SELECT
    job.Name, job.job_ID
    ,job.Originating_Server
    ,activity.run_requested_Date
    ,datediff(minute, activity.run_requested_Date, getdate()) AS Elapsed
FROM
    msdb.dbo.sysjobs_view job 
        INNER JOIN msdb.dbo.sysjobactivity activity
        ON (job.job_id = activity.job_id)
WHERE
    run_Requested_date is not null 
    AND stop_execution_date is null
    AND job.name like 'Your Job Prefix%'

Как сказал Тим, документация MSDN / BOL достаточно хороша в содержании таблиц sysjobsX. Просто помните, что это таблицы в MSDB.


10
-- Microsoft SQL Server 2008 Standard Edition:
IF EXISTS(SELECT 1 
          FROM msdb.dbo.sysjobs J 
          JOIN msdb.dbo.sysjobactivity A 
              ON A.job_id=J.job_id 
          WHERE J.name=N'Your Job Name' 
          AND A.run_requested_date IS NOT NULL 
          AND A.stop_execution_date IS NULL
         )
    PRINT 'The job is running!'
ELSE
    PRINT 'The job is not running.'

3

мы можем запросить msdb во многих отношениях, чтобы получить детали.

немногие

select job.Name, job.job_ID, job.Originating_Server,activity.run_requested_Date,
datediff(minute, activity.run_requested_Date, getdate()) as Elapsed 
from msdb.dbo.sysjobs_view job 
inner join msdb.dbo.sysjobactivity activity on (job.job_id = activity.job_id) 
where run_Requested_date is not null 
and stop_execution_date is null 
and job.name like 'Your Job Prefix%'
SQL, SQL-сервер 2005, TSQL, хранившаяся-процедура,
Похожие вопросы