Enterprise databases
have many jobs running on them, some of them take care of daily loads like
incremental loads, extract generators, database maintenance activities , hourly
jobs which are used for delivering reports through e-mail.
These huge databases
are maintained by support teams, and they have to keep an eye on the
progression or status of a specific jobs , as the loading or extracts generation
should complete within a time limit. Below is a useful script to get the list
of jobs running on a server at that moment.
BEGIN
DECLARE @jobstatus
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 varchar(100),
Running int, Current_Step int,
Current_Retry_Attempt int, State int)
INSERT INTO @jobstatus
EXEC MASTER.dbo.xp_sqlagent_enum_jobs 1,garbage
BEGIN
SELECT
DISTINCT CASE
WHEN
state=1 THEN 'Job is Executing'
WHEN
state=2 THEN 'Waiting for thread to
complete'
WHEN
state=3 THEN 'Between retries'
WHEN
state=4 THEN 'Job is Idle'
WHEN
state=5 THEN 'Job is suspended'
WHEN
state=7 THEN 'Performing completion
actions'
END
AS State,sj.name,
CASE
WHEN ej.running=1 THEN st.step_id ELSE 0 END AS currentstepid,
CASE
WHEN ej.running=1 THEN st.step_name ELSE 'not executing' END AS currentstepname,
st.command, ej.request_source_id
FROM
@jobstatus ej join msdb..sysjobs
sj ON sj.job_id=ej.job_id
JOIN
msdb..sysjobsteps st ON
st.job_id=ej.job_id AND (st.step_id=ej.current_step or ej.current_step=0)
WHERE
ej.running+1>1
END
END
xp_sqlagent_enum_jobs
is an undocumented procedure in SQL Server. The documented SP for this is sp_help_job. It eventually calls the xp_sqlagent_enum_jobs
procedure. If you created a table to hold the results from this procedure, you
could find plenty of documentation in it.
No comments:
Post a Comment