Как SQL Server может отправить сообщение об ошибке по электронной почте, если издателю репликации не удается подключиться к системе подписчика - PullRequest
2 голосов
/ 01 декабря 2009

У нас есть несколько удаленных мест, где мы настроили репликацию SQL Server 2005. Иногда издатель не может тиражировать по разным причинам, таким как

1) проблемы с сетью,

2) неправильное отключение абонента,

3) изменение паролей домена,

4) изменение паролей SQL,

5) сбой при включении абонентской системы.

Можно ли заставить сервер SQL отправлять администратору электронное письмо, когда это происходит, чтобы он мог проверить?

Спасибо, Чак.

Ответы [ 3 ]

3 голосов
/ 03 февраля 2010

Что касается обнаружения проблем с агентом, вы хотите знать, когда программа чтения и распространения журналов остановлена. У меня также есть непрерывная репликация, как у chadhoc, но мне проще использовать Alert, чтобы сообщить мне, остановлены ли агенты.

USE [msdb] 
GO 
EXEC msdb.dbo.sp_add_alert  
    @name=N'Distribution agent stopped',   
    @message_id=0,  
    @severity=0,  
    @enabled=1,   
    @delay_between_responses=2160, 
    @include_event_description_in=1,   
    @category_name=N'[Uncategorized]',  
    @performance_condition=N'MSSQL$MYDATABASE:Replication Agents|Running|Distribution|=|0', 
    @job_id=N'00000000-0000-0000-0000-000000000000' 
GO 
EXEC msdb.dbo.sp_update_notification 
    @alert_name=N'Distribution agent stopped',   
    @operator_name=N'Amit',  
    @notification_method = 1 

Ошибки проверки / синхронизации не так просто обнаружить. Вы можете настроить ночное задание для запуска sp_publication_validation и настроить другое оповещение о "Ошибка проверки".

1 голос
/ 01 декабря 2009

Я не особо разбираюсь в репликации, но sp_readerrorlog - очень полезная хранимая процедура, позволяющая получить доступ к журналам БД из экземпляра базы данных. При необходимости это может позволить вам более адекватно реагировать на конкретные сообщения об ошибках, а не только на ветки SUCCESS / FAIL из задания агента. Конечно, вы также можете отправить электронное письмо непосредственно из сохраненного процесса, настраивая получателей в зависимости от того, кто лучше всего отреагирует на ошибку (или, например, время суток - дневная / ночная смены).

Также, возможно, было бы более целесообразно отправить электронное письмо, если задание будет успешным, а не неудачным, учитывая, что ваши потенциальные сбои включают отключение сети? Возможно, вы захотите настроить правило обмена на вашем конце, чтобы отслеживать этот почтовый ящик и выдавать уведомление об ошибке вашему администратору, если оно не получает сообщение об ожидаемом успехе .... люди очень хорошо отфильтровывают постоянные стимулы и отсутствие сообщение об успехе может быть легко пропущено. Обмен с другой стороны всегда (обычно) бдителен.

1 голос
/ 01 декабря 2009

Обычно я справляюсь с этим, изменяя задания (ий) Sql Agent, отвечающие за запуск / запуск агентов репликации (в зависимости от вашей топологии репликации их может быть множество в потенциально разных местах). Просто добавьте шаг задания в соответствующее задание (я) агента (т. Е. Агент чтения журнала, агент распространения, агент слияния, агент очереди и т. Д.) После шага «запустить агент», который выполняется, если / когда этот шаг завершается / завершается неудачей ( в зависимости от того, используете ли вы непрерывный график или нет).

Например, если у меня настроена однонаправленная принудительная публикация транзакций, агент распространителя будет работать. Если я подключусь к дистрибьютору и обнаружу, что задание Sql Agent отвечает за запуск агента распространителя для этой публикации, я могу изменить задание и добавить шаг для отправки электронного письма определенной группе, если шаг «Запустить агент» завершается неудачно / завершается. Если я использую расписание непрерывной репликации, я просто добавлю этот шаг в электронное письмо, если шаг «запустите агент» завершится (так как я хочу получать уведомление, если агент останавливается по какой-либо причине). Если я использую непостоянное расписание, я могу вместо этого выполнить шаг электронной почты только в случае сбоя шага «Запустить агент». Вы даже можете настроить этот шаг «электронной почты» для отправки электронной почты, сделать небольшую паузу, а затем попытаться перезапустить агент автоматически (просто настроив шаг «перейти к шагу 1» в случае успеха).

Вот снимок экрана, на котором показано, как выглядят этапы работы для агента распространения, настроенного, как я обрисовал выше:

distribution agent configured with notify, pause, restart step

На приведенном выше рисунке вы заметите, что я добавил шаг под названием «Уведомить, приостановить, повторить», который будет выполняться каждый раз, когда агент останавливается (успех или неудача - это намеренно, поскольку я использую расписание непрерывной репликации). и просто хочу знать, когда агент распространения не работает по какой-либо причине). Этот шаг в основном отправляет электронное письмо определенной группе, ждет минуту или две, а затем снова запускает агента. Вы можете добавить код, чтобы делать все, что вам нравится, включая ведение журнала, перезапуск только определенного количества раз в определенный промежуток времени и т. Д. Он легко сценариев и повторяется для любого числа агентов, публикаций и т. Д. (У меня есть сценарии, чтобы обеспечить любой новый Агент репликации в топологии любого типа включает в себя этот тип конфигурации - тогда просто нужно добавить их в инструмент выпуска или запланировать выполнение, в зависимости от того, как вы развертываете в своей среде).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...