Вся информация о Job`ах хранится в системной БД msdb. Например весь их перечень находится в таблице msdb.dbo.sysjobs. Ход выполнения конкретного джоба можно отслеживать через системные представления, при этом не только отслеживая, когда и под кем он был запущен, а так же кто его блокирует в данный момент и даже текущий запрос, который выполняется в этом джобе.
select j.name -- Имя задания , r.session_id -- Идентификатор сеанса, к которому относится данный запрос , r.start_time -- Временная метка поступления запроса , r.status -- Состояние запроса , r.blocking_session_id -- Идентификатор сеанса, блокирующего данный запрос , r.wait_time -- Если запрос в настоящий момент блокирован, -- в столбце содержится продолжительность текущего ожидания (в миллисекундах) , r.cpu_time -- Процессорное время (в миллисекундах), затраченное на выполнение запроса , r.total_elapsed_time -- Общее время, истекшее с момента поступления запроса (в миллисекундах) , r.reads -- Число операций чтения, выполненных данным запросом , r.writes -- Число операций записи, выполненных данным запросом , r.logical_reads -- Число логических операций чтения, выполненных данным запросом , t.text -- Текст SQL-запроса from sys.dm_exec_requests r inner join sys.dm_exec_sessions s on r.session_id = s.session_id cross apply sys.dm_exec_sql_text ( sql_handle ) t inner join msdb.dbo.sysjobs j on s.program_name like '%' + master.dbo.fn_varbintohexstr( j.job_id ) + '%' where j.name = N'Имя задания' Определить текущий статус задания через EP (Extended Stored Procedure): declare @xp_results table ( [Job ID] uniqueidentifier ,[Last Run Date] int ,[Last Run Time] int ,[Next Run Date] int ,[Next Run Time] int ,[Next Run Schedule ID] int ,[Requested To Run] int ,[Request Source] int ,[Request Source ID] nvarchar(128) ,[Running] int ,[Current Step] int ,[Current Retry Attempt] int ,[State] int ) insert into @xp_results exec master.dbo.xp_sqlagent_enum_jobs 1, sa select s.name , state = case x.[State] when 0 then 'Cостояние бездействия или приостановки' when 1 then 'Выполняется' when 2 then 'Ожидание потока' when 3 then 'Ожидание повторной попытки' when 4 then 'Бездействие' when 5 then 'Приостановлен' when 7 then 'Выполняеются завершающие действия' end from @xp_results x inner join msdb.dbo.sysjobs s on x.[Job ID] = s.job_id where s.name = N'Имя задания' Вариант для SQL Server 2005 и выше.
select
j.
name
-- Имя задания
, r.session_id
-- Идентификатор сеанса, к которому относится данный запрос
, r.start_time
-- Временная метка поступления запроса
, r.status
-- Состояние запроса
, r.blocking_session_id
-- Идентификатор сеанса, блокирующего данный запрос
, r.wait_time
-- Если запрос в настоящий момент блокирован,
-- в столбце содержится продолжительность текущего ожидания (в миллисекундах)
, r.cpu_time
-- Процессорное время (в миллисекундах), затраченное на выполнение запроса
, r.total_elapsed_time
-- Общее время, истекшее с момента поступления запроса (в миллисекундах)
, r.reads
-- Число операций чтения, выполненных данным запросом
, r.writes
-- Число операций записи, выполненных данным запросом
, r.logical_reads
-- Число логических операций чтения, выполненных данным запросом
, t.text
-- Текст SQL-запроса
from
sys.dm_exec_requests r
inner
join
sys.dm_exec_sessions s
on
r.session_id = s.session_id
cross
apply sys.dm_exec_sql_text ( sql_handle ) t
msdb.dbo.sysjobs j
s.program_name
like
'%'
+ master.dbo.fn_varbintohexstr( j.job_id ) +
where
= N
'Имя задания'
Определить текущий статус задания через EP (Extended Stored Procedure):
declare
@xp_results
table
( [Job ID] uniqueidentifier
,[
Last
Run
Date
]
int
Time
Next
Run Schedule ID]
,[Requested
To
Run]
,[Request Source]
,[Request Source ID] nvarchar(128)
,[Running]
Current
Step]
Retry Attempt]
,[State]
)
insert
into
exec
master.dbo.xp_sqlagent_enum_jobs 1, sa
s.
, state =
case
x.[State]
when
0
then
'Cостояние бездействия или приостановки'
1
'Выполняется'
2
'Ожидание потока'
3
'Ожидание повторной попытки'
4
'Бездействие'
5
'Приостановлен'
7
'Выполняеются завершающие действия'
end
@xp_results x
msdb.dbo.sysjobs s
x.[Job ID] = s.job_id
Вариант для SQL Server 2005 и выше.