Me gustaría agregar a la respuesta correcta de Mladen Prajdic y mejorar la respuesta de kevchadders desde SQL Server Central. La solución que propongo a continuación utiliza DBMail en lugar de SQLMail (que es utilizada por la solución de SQLServerCentral a través de la llamada xp_sendmail).Esencialmente, SQLMail usa MAPI y es más difícil de configurar y DBMail usa SMTP y es más fácil de configurar. Aquí está more information sobre la diferencia entre los dos.
no pude conseguir la solución de SQL Server central para trabajar en SQL 2005 y la solución a continuación sólo se ha probado en mi instalación de SQL 2005 - Tu caso es distinto dependiendo de la versión.
En primer lugar, se necesita un nuevo UDF, lo que se traducirá el ID de trabajo en el identificador de proceso para una combinación:
CREATE FUNCTION dbo.udf_SysJobs_GetProcessid(@job_id uniqueidentifier)
RETURNS VARCHAR(8)
AS
BEGIN
RETURN (substring(left(@job_id,8),7,2) +
substring(left(@job_id,8),5,2) +
substring(left(@job_id,8),3,2) +
substring(left(@job_id,8),1,2))
END
Y entonces el sproc:
CREATE PROC sp_check_job_running
@job_name char(50),
@minutes_allowed int,
@person_to_notify varchar(50)
AS
DECLARE @minutes_running int,
@message_text varchar(255)
SELECT @minutes_running = isnull(DATEDIFF(mi, p.last_batch, getdate()), 0)
FROM master..sysprocesses p
JOIN msdb..sysjobs j ON dbo.udf_sysjobs_getprocessid(j.job_id) = substring(p.program_name,32,8)
WHERE j.name = @job_name
IF @minutes_running > @minutes_allowed
BEGIN
SELECT @message_text = ('Job ' + UPPER(SUBSTRING(@job_name,1,LEN(@job_name))) + ' has been running for ' + SUBSTRING(CAST(@minutes_running AS char(5)),1,LEN(CAST(@minutes_running AS char(5)))) + ' minutes, which is over the allowed run time of ' + SUBSTRING(CAST(@minutes_allowed AS char(5)),1,LEN(CAST(@minutes_allowed AS char(5)))) + ' minutes.')
EXEC msdb.dbo.sp_send_dbmail
@recipients = @person_to_notify,
@body = @message_text,
@subject = 'Long-Running Job to Check'
END
Esto puede sproc se puede programar fácilmente como un trabajo del Agente SQL Server o cualquier otro método necesario. No requiere ninguna acción si el trabajo no se está ejecutando o si se está ejecutando dentro de los parámetros especificados. Envía el correo electrónico si el trabajo se ha ejecutado más de lo especificado.
p. Ej.
EXEC sp_check_job_running 'JobNameGoesHere', 5, '[email protected]'
HT: http://www.sqlserverspecialists.co.uk/blog/_archives/2008/11/26/3996346.html
¿me puede dar un poco más detalles ? – muerte