Scripts: Jobs no ejecutados en el último año / Actividad de Jobs Detallada

For English version visit this link Scripts: Jobs Not Executed in the Last Year / Job Activity Details
 
Hace unos días estuve buscando un script que me permitiera saber cuando fue la última ejecución de un job, para así poder revisar los jobs que llevaran más de 1 año sin ejecutarse y poder borrar los que no fueran necesarios, pero no encontré lo que buscaba por lo que tuve que crear uno.
 
He usado las columnas last_run_date y last_run_time de la tabla sysjobservers para sacar este dato, los scripts que encontré por Internet usaban otras columnas de otras tablas que paso a describir por qué no las elegí:
 
Scripts que usaban las columnas run_date y run_time de la tabla sysjobhistory, estas columnas muestran el tiempo de la última ejecución de los pasos de un job, esta opción podía ser válida pero no se eligió porque requería hacer un cálculo extra para obtener el último paso.
 
Scripts que usaban la columna run_requested_date de la tabla sysjobactivity, esta columna muestra el tiempo de ejecución de varias sesiones de un mismo job, esta opción podía ser válida pero no se eligió porque requería hacer un cálculo extra para obtener la última sesión.
 
Este es el Script:

/*--------------------------------------------------------------------------------------
-- Title: Jobs no ejecutados en el último año
-- Author: Fran Lens (http://www.lensql.net)
-- Date: 2012-02-15
-- Description: Esta consulta devuelve los jobs que no se han ejecutado en el último año
--------------------------------------------------------------------------------------*/
USE msdb
SELECT * FROM (
SELECT
 [Job_Name] = j.name
,[Last_Run_Time] = CASE
 WHEN js.last_run_date > 0 THEN substring(convert(varchar(8),js.last_run_date),1,4) +'-'+ substring(convert(varchar(8),js.last_run_date),5,2) +'-'+ substring(convert(varchar(8),js.last_run_date),7,2) +' '+
 CASE len(js.last_run_time)
 WHEN 6 THEN substring(convert(varchar(8),js.last_run_time),1,2) +':'+ substring(convert(varchar(8),js.last_run_time),3,2) +':'+ substring(convert(varchar(8),js.last_run_time),5,2)
 WHEN 5 THEN +'0'+ substring(convert(varchar(8),js.last_run_time),1,1) +':'+ substring(convert(varchar(8),js.last_run_time),2,2) +':'+ substring(convert(varchar(8),js.last_run_time),4,2)
 WHEN 4 THEN +'00:'+ substring(convert(varchar(8),js.last_run_time),1,2) +':'+ substring(convert(varchar(8),js.last_run_time),3,2)
 WHEN 3 THEN +'00:0'+ substring(convert(varchar(8),js.last_run_time),1,1) +':'+ substring(convert(varchar(8),js.last_run_time),2,2)
 WHEN 2 THEN +'00:00:'+ substring(convert(varchar(8),js.last_run_time),1,2)
 WHEN 1 THEN +'00:00:0'+ substring(convert(varchar(8),js.last_run_time),1,1)
 END
 ELSE 'Never Executed'
 END
,[Drop_Statement] = 'sp_delete_job @job_name = ' + '''' + j.name + ''''
FROM sysjobs j
INNER JOIN sysjobservers js on j.job_id = js.job_id
)as ttable
WHERE [Last_Run_Time] < (SELECT convert(varchar, getdate()-365, 121))
ORDER BY [Last_Run_Time]
Después de crear este script, me decidí a crear otro que mostrara toda la actividad realizada por los jobs, como si se tratase del Job Activity Monitor
 
Este es el otro Script:
/*--------------------------------------------------------------------------------------
-- Title: Actividad de Jobs Detallada
-- Author: Fran Lens (http://www.lensql.net)
-- Date: 2012-02-15
-- Description: Esta consulta devuelve información de la ejecuciones de los jobs, es parecido al Job Activity Monitor
--------------------------------------------------------------------------------------*/
USE msdb
SELECT * FROM (
SELECT
 [Job_Name] = j.name
,[Owner] = sp.name
,[Job_Status] = CASE
					WHEN j.enabled = 1 THEN 'Enabled'
					ELSE 'Disabled'
				END
,[Last_Run_Status] = CASE js.last_run_outcome
						 WHEN 0 THEN 'Failed'
						 WHEN 1 THEN 'Succeeded'
						 WHEN 3 THEN 'Cancelled'
						 WHEN 4 THEN 'In Progress'
						 WHEN 5 THEN 'Unknown'
					 END
,[Last_Run_Time] = CASE
						 WHEN js.last_run_date > 0 THEN substring(convert(varchar(8),js.last_run_date),1,4) +'-'+ substring(convert(varchar(8),js.last_run_date),5,2) +'-'+  substring(convert(varchar(8),js.last_run_date),7,2) +' '+
							CASE len(js.last_run_time)
								WHEN 6 THEN substring(convert(varchar(8),js.last_run_time),1,2) +':'+ substring(convert(varchar(8),js.last_run_time),3,2) +':'+ substring(convert(varchar(8),js.last_run_time),5,2)
								WHEN 5 THEN +'0'+ substring(convert(varchar(8),js.last_run_time),1,1) +':'+ substring(convert(varchar(8),js.last_run_time),2,2) +':'+ substring(convert(varchar(8),js.last_run_time),4,2)
								WHEN 4 THEN +'00:'+ substring(convert(varchar(8),js.last_run_time),1,2) +':'+ substring(convert(varchar(8),js.last_run_time),3,2)
								WHEN 3 THEN +'00:0'+ substring(convert(varchar(8),js.last_run_time),1,1) +':'+ substring(convert(varchar(8),js.last_run_time),2,2)
								WHEN 2 THEN +'00:00:'+ substring(convert(varchar(8),js.last_run_time),1,2)
								WHEN 1 THEN +'00:00:0'+ substring(convert(varchar(8),js.last_run_time),1,1)
							END
						 ELSE 'Never Executed'
						 END
,[Next_Run_Time] = CASE
						WHEN ja.next_scheduled_run_date > 0 THEN convert(varchar(19),ja.next_scheduled_run_date,121)
						ELSE 'Not Scheduled'
				   END
,[Description] = j.description
,[Drop_Statement] = 'sp_delete_job @job_name = ' + '''' + j.name + ''''
FROM sysjobs j
INNER JOIN sysjobservers js on j.job_id = js.job_id
INNER JOIN sysjobactivity ja on j.job_id = ja.job_id
INNER JOIN sys.server_principals sp on j.owner_sid = sp.sid
WHERE ja.session_id = (SELECT MAX(session_id) from msdb.dbo.sysjobactivity)
)as ttable
ORDER BY [Last_Run_Time]

About Fran Lens
SQL Server Analyst at Avanade Spain http://www.lensql.net

One Response to Scripts: Jobs no ejecutados en el último año / Actividad de Jobs Detallada

  1. Christian says:

    Hola, interesante tu post, quisiera hacerte una consulta: Quisiera saber qué JOBS NO han sido ejecutados por “x” razones, ya sea por un apagón de servidores por ejemplo.
    Quiero llegar a determinar esto porque, necesito ejecutarlos de todas maneras.
    Si me das alguna luz para llegar a esto, te lo agradecería.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: