Как группы доступности работают с запланированными заданиями и пакетами служб SSIS?

8

У меня есть 2 сервера SQL с базой данных в группе доступности AlwaysOn.

У меня также есть задания, которые работают с базой данных. Как обеспечить, чтобы задания продолжали выполняться на дополнительном сервере во время отработки отказа? Нужно ли устанавливать задания и пакеты служб SSIS на обоих компьютерах и вручную отключать их на дополнительном компьютере ... затем вручную включать их в случае сбоя? Или есть встроенная функциональность, чтобы справиться с этим?

Джон
источник

Ответы:

4

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

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

Помните, что вторичный сервер реплики - это не просто резервный сервер, ожидающий отработки отказа. Это может быть полнофункциональный, доступный сервер. Из-за этого любая работа без дела была бы огромной инвалидностью.

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

Например, задания резервного копирования могут использовать функцию sys.fn_hadr_backup_is_preferred_replica , определяя, является ли текущая реплика предпочтительной для конкретной базы данных. Таким образом, вы получите информацию о настройках группы доступности для параметров резервного копирования.

Томас Стрингер
источник
Это звучит многообещающе. Я только хочу, чтобы задания запускались на основном сервере (который когда-либо был на сервере).
Джон
1

Я столкнулся с похожим разочарованием в документации на Books Online, в которой говорилось: «При планировании своей работы добавьте логику, чтобы она выполнялась только на основной», но не говорите, как это сделать. Sys.fn_hadr_backup_is_preferred_replica очень хороша для заданий резервного копирования, но, похоже, нет аналогичной функции для «первичного» или чего-то еще. К счастью, вы можете получить эту информацию примерно так:

select 
  DB_NAME(database_id),role_desc
from 
  sys.dm_hadr_availability_replica_states a
inner join 
  sys.dm_hadr_database_replica_states d
on 
  a.replica_id = d.replica_id
  and
  a.group_id = d.group_id
where 
  database_id = DB_ID()
and 
  d.is_local = 1

Это позволит вам узнать роль текущей базы данных.

sdcharle
источник