Como os Grupos de Disponibilidade trabalham com tarefas com cronograma e pacotes SSIS?

8

Eu tenho 2 servidores SQL configurados com um banco de dados em um grupo de disponibilidade AlwaysOn.

Também tenho trabalhos configurados que são executados no banco de dados. Durante um failover, como asseguro que os trabalhos continuem sendo executados no servidor secundário? Preciso instalar os trabalhos e pacotes SSIS nas duas máquinas e desabilitá-los manualmente na máquina secundária ... e habilitá-los manualmente no caso de um failover? Ou existe uma funcionalidade incorporada para lidar com isso?

John
fonte

Respostas:

4

Sim, você precisará criar os trabalhos em quaisquer outras réplicas que gostaria que esses trabalhos específicos fossem executados se fossem a réplica primária.

Você precisará criar sua própria lógica para se / quando cada tarefa do SQL Server Agent será executada . Por exemplo, você deseja executar um trabalho apenas se a instância atual for a réplica primária de um determinado Grupo de Disponibilidade? Você precisará colocar isso em seu trabalho. Não pode ser coberto automaticamente, porque isso tiraria a flexibilidade da AlwaysOn AG. Se você deseja que eles sejam desativados nas réplicas secundárias, você decide o que esses trabalhos fazem e como / quando / se você deseja que eles sejam executados.

Lembre-se de que o servidor de réplica secundário não é apenas um servidor em espera aguardando failover. Pode ser um servidor acessível e totalmente funcional. Por causa disso, ter todos os empregos ociosos seria uma enorme incapacidade.

Portanto, sim, você precisará enviar nossos trabalhos para outras réplicas e usar alguma lógica para determinar se o trabalho deve continuar em execução quando iniciar.

Por exemplo, as tarefas de backup podem aproveitar a função sys.fn_hadr_backup_is_preferred_replica , determinando se a réplica atual é a preferida para um banco de dados específico. Isso resultará em como você configurou seu Grupo de Disponibilidade para preferências de backup.

Thomas Stringer
fonte
Isso parece promissor. Eu só quero que os trabalhos sejam executados no servidor principal (qualquer servidor que possa estar no momento).
John
1

Eu encontrei um pouco de frustração semelhante com a documentação do Books Online dizendo 'ao agendar seu trabalho, adicione lógica para executar apenas no primário', mas sem dizer como fazê-lo. O sys.fn_hadr_backup_is_preferred_replica é super agradável para tarefas de backup, mas não parece haver uma função semelhante para 'is primary' ou o que você tem. Felizmente, você pode obter essas informações de algo assim:

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

Isso apenas informaria a função do banco de dados atual.

sdcharle
fonte