Распознавание не составляет труда, но это только верхушка айсберга


Выяснить в процессе выполнения, содержит ли данный экземпляр SQL Server основную реплику (что делается с помощью двух определяемых пользователем функций, описанных выше) — задача в целом несложная. И потому логично предположить, что, если вам предстоит выполнить весьма простое задание, достаточно предусмотреть проверки if/else в шагах задания, и задача будет решена: ваши задания или шаги заданий будут выполняться только при наличии основных реплик. Представьте себе некое весьма тривиальное пакетное задание. Допустим, его нужно выполнять каждые четыре часа и состоит оно в удалении всех значений в таблице MyAgDatabase. dbo.UserActivityLogs. Возможно, это не лучший способ решения подобной проблемы, но я просто пытаюсь удержать логику задания на элементарном уровне.

Если бы нам предстояло выполнить такой сценарий, было бы логично присвоить заданию агента SQL Server имя, например Delete Older User Activity Logs, с соответ

ствующим графиком и предусмотреть в задании единственный шаг с деталями, который имел бы примерно такой вид, как на экране 1. Здесь вы отметите, что данное задание должно выполняться в базе данных MyAGDatabase, которая, с одной стороны, входит в состав некоей группы доступности (с оригинальным именем TestAG), а с другой — является той базой данных, которая содержит таблицу UserActivityLogs.

Теперь, когда вы располагаете всей дополнительной информацией, представьте, что вам нужно внести в шаг задания небольшое изменение, как на экране 2.

Вы просто добавили логическую конструкцию if/else, которая позволит вам динамически определить (во время выполнения), содержит ли сервер, на котором выполняется это задание, основную реплику. Теперь давайте исходить из того, что в вашей группе доступности имеется только два сервера, или хоста. Распределите это единственное задание по двум серверам исходя из того, что логика, которую вы только что реализовали, решит ваши проблемы и гарантирует, что задание Delete Older Logs теперь будет выполняться лишь на том сервере (базе данных), на котором это возможно и на котором расположена основная реплика (разрешены операции чтения/записи). Если вы проделаете все это, а затем запустите задание на выполнение, процесс будет идти прямо-таки безупречно на сервере, где размещается основная реплика. Но на вспомогательном сервере будут отображаться сообщения об ошибке, подобные оповещениям в истории заданий, как на экране 3.

Комментарии