Acabei de obter uma configuração do Sql Server 2016 Availability Group (um primário, um secundário síncrono e um secundário assíncrono). Eu tenho cinco bancos de dados nos servidores.
Eu configurei um aplicativo para executar consultas no servidor (usando o Entity Framework com uma cadeia de conexão de "parceiro de failover").
Quando tentei testar o failover reiniciando o servidor primário, recebi o seguinte erro:
Servidor MySecondaryServer, banco de dados mestre não está configurado para espelhamento de banco de dados.
Parece estranho espelhar um banco de dados do sistema como este, então não o configuramos como um dos "Bancos de Dados de Disponibilidade".
Então, aqui está minha pergunta: Devo adicionar o banco de dados mestre à lista de "Bancos de Dados de Disponibilidade" e isso causará problemas se eu fizer isso?
Não é possível incluir master como um banco de dados de disponibilidade em um grupo de disponibilidade (AG). Os bancos de dados do sistema (master, model, msdb, tempdb) não podem fazer parte do Grupo de Disponibilidade.
Os bancos de dados do sistema são objetos em nível de instância . Eles são necessários para que a instância esteja online e disponível. Os Grupos de Disponibilidade estão um nível abaixo disso e fornecem replicação em nível de banco de dados de uma instância para outra (ou várias outras).
O SQL Server impedirá que você adicione bancos de dados do sistema a um AG porque esses bancos de dados precisam ser lidos e gravados em cada instância para que a instância fique online.
Além disso, conforme declarado na resposta em sua outra pergunta , você não deve usar o atributo de cadeia de conexão do parceiro de failover. Esse atributo foi projetado para uso com espelhamento de banco de dados - um recurso de disponibilidade diferente e obsoleto. Em vez disso, você deve usar um AG Listener , que também fornecerá a direção adequada para o nó primário e também permitirá que você use outros recursos específicos do AG, como roteamento somente leitura.
Voltando ao seu erro....
Seu código provavelmente não deve depender do banco de dados mestre, principalmente em um AG, onde seu banco de dados pode ser movido para uma instância diferente com um banco de dados mestre diferente. No interesse da arquitetura AG mais simples e à prova de balas, geralmente recomendo que você se esforce para tornar seu banco de dados autocontido ou tome a decisão intencional e educada de colocar algo fora do banco de dados.
Meu primeiro palpite (e não saber mais sobre seu código ou sua conexão) é que sua consulta não deve fazer referência ao mestre. Pode ser apenas que sua string de conexão esteja colocando você no banco de dados mestre em vez do banco de dados que você deseja - então corrija seu código ou string de conexão, não seu AG.