Não é tão difícil. Lembre-se de que o SQL Server mantém informações de metadados o tempo todo sobre quais detalhes estão sendo feitos no servidor ativamente. Eu faria isso para encontrar falhas em que você pudesse criar um proc ou função, chamá-lo por intervalo de datas. Eu dei um exemplo apenas da consulta por enquanto:
use msdb;
declare
@Start int = cast( convert(varchar,
dateadd(ww, datediff(ww, 0, getdate())-1,0) -- last week starting
, 112) as int)
, @End int = cast( convert(varchar,
getdate() -- current datetime
, 112) as int)
;
Select
j.name
, j.description
, cast( cast(jh.run_date as varchar) + ' ' + left(jh.run_time, 2) + ':' + substring( cast(jh.run_time as varchar), 3, 2) as datetime) as TimeRan
, jh.message
, jh.step_id
, jh.step_name
from sysjobs j (nolock)
join sysjobhistory jh (nolock) on j.job_id = jh.job_id
and jh.run_date between @Start and @End
and jh.run_status = 0 -- 0 is failure