Comments 20
сформировать HTML-отчет для дальнейшей отправки на почту администраторам о результатах:
Формирование текста HTML отчета в цикле это сильно! А почему не использовали конкатенацию через for xml path('')?
+1
Это одна из возможностей
Можно конечно, как и Вы предлагаете.
Приведите пример
Можно конечно, как и Вы предлагаете.
Приведите пример
0
Примерно накидал код на основе вашей процедуры. Как бонус обернул текст в табличку.
Пример конкатенации
declare @body nvarchar(max)
set @body = ( select
cast(Job_GUID as nvarchar(36)) + '</td><td>'
+ isnull(Job_Name, '') + '</td>'
from srv.ShortInfoRunJobs
for xml path('tr'))
set @body = '<html>
<head>
<style type="text/css">
table {
border-collapse: collapse;
border: 2px solid black;
font: 10pt helvetica;
}
th {
padding: 10px;
text-align: center;
}
td {
padding: 10px;
text-align: center;
}
</style>
</head>
<body>
<table border="1" cellspacing="0">'
+ '<tr><th>ID</th><th>Job name</th></tr>'
+ replace( replace( @body, '<', '<' ), '>', '>' )
+ '</table>
</body>
</html>';
+1
.
0
Из опыта, используем Zabbix для централизованного мониторинга. Количество заданий, выполнившихся с ошибкой мониторим через счетчик \SQLAgent:Jobs(_Total)\Failed jobs.
+1
Zabbix-ом можно мониторить и время выполнения задания, например написав соответсвтующий запрос и выполнять его через zabbix по odbc. Через zabbix можно вообще много чего реализовать, было бы желание))
+1
https://www.zabbix.com/documentation/3.0/ru/manual — официальная документация, более чем достаточно для начала. Развернуть можно несколькими способами, если не хотите заморачиваться, то можно скачать уже готовый образ системы и развернуть его, вот ссылка http://www.zabbix.com/ru/download. Относительно SQL Server мы мониторим счетчики perfmon и по odbc.
+1
Можно без создания прямо в агенте сделать задание
подставив нужных получателей и почтовый профиль
IF (SELECT COUNT(*)
FROM sysjobs AS s
INNER JOIN sysjobsteps AS s2 (nolock) ON s2.job_id = s.job_id
INNER JOIN dbo.sysjobhistory sh (nolock) ON sh.instance_id=(SELECT MAX(sjh.instance_id) FROM dbo.sysjobhistory sjh (nolock) WHERE sjh.job_id=s.job_id AND sjh.step_id=s2.step_id)
AND sh.run_date>=(SELECT MAX(sjh.run_date) FROM dbo.sysjobhistory sjh (nolock) WHERE sjh.job_id=s.job_id AND sjh.step_id=0)
WHERE s.[enabled]=1 AND sh.run_status=0)>0
BEGIN
DECLARE @tableHTML AS NVARCHAR(max)
SET @tableHTML =
N'<H1>Ошибки в джобах на sql сервере '+@@SERVERNAME+'</H1>' +
N'<table border="1">' +
N'<tr><th>Джоб</th><th>ID шага</th>' +
N'<th>Имя шага</th><th>команда</th><th>база</th>' +
N'<th>последний запуск</th><th>ошибка</th></tr>' +
CAST ( ( SELECT td = s.name,'', td = s2.step_id,'', td = s2.step_name, '',td = cast(s2.command AS VARCHAR(100)),'', td = s2.database_name,'',
td = s2.last_run_date,'', td = cast(sh.[message] AS VARCHAR(100))
FROM sysjobs AS s (nolock)
INNER JOIN sysjobsteps AS s2 (nolock) ON s2.job_id = s.job_id
INNER JOIN dbo.sysjobhistory sh (nolock) ON sh.instance_id=(SELECT MAX(sjh.instance_id) FROM dbo.sysjobhistory sjh (nolock) WHERE sjh.job_id=s.job_id AND sjh.step_id=s2.step_id)
AND sh.run_date>=(SELECT MAX(sjh.run_date) FROM dbo.sysjobhistory sjh (nolock) WHERE sjh.job_id=s.job_id AND sjh.step_id=0)
WHERE s.[enabled]=1 AND sh.run_status=0
--ORDER BY s.name, s2.step_id
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
DECLARE @subject AS NVARCHAR(max)
SET @subject='Ошибка в работе джобов на сервере '+@@SERVERNAME
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MAIL'
,@recipients = ''
,@subject = @subject
,@importance ='Normal'
,@body = @tableHTML
,@body_format = 'HTML'
END
подставив нужных получателей и почтовый профиль
+1
Верно, однако лучше оборачивать все в хранимые процедуры. Так проще поддерживать и найти зависимости, чем код читать прямо в заданиях Агента
0
Там убогий EditBox под это дело и весь этот код совершенно невозможно будет прочитать, тем более исправить.
+1
Огромное спасибо programmer76 за увиденную ошибку в публикации. Поправил.
Ошибка заключалась в том, что при вставке данных нет смысла сортировать, а сортировать нужно в момент отбора-шаг 4 алгоритма.
Ошибка заключалась в том, что при вставке данных нет смысла сортировать, а сортировать нужно в момент отбора-шаг 4 алгоритма.
0
Sign up to leave a comment.
Автосбор данных о выполненных заданиях в MS SQL Server