Temos uma configuração de espelhamento de banco de dados entre PROD
e SECONDARY
e fizemos failover para a réplica secundária ( SECONDARY
). Agora estamos recebendo uma série de logins com falha quase constantes exibidos no log do servidor PROD
.
Os aplicativos usam a propriedade Failover Partner da cadeia de conexão:
Data Source=PROD;Failover Partner=SECONDARY;Initial Catalog=myDataBase;
e confirmamos que eles estão funcionando conforme o esperado.
Faz sentido que o banco de dados especificado explicitamente PROD
não possa ser aberto, pois está em um estado de restauração devido ao failover, mas o aplicativo está se conectando com êxito ao SECONDARY
. Esta mensagem de erro é o comportamento esperado em uma réplica primária de espelhamento de banco de dados com falha?
Abaixo replica o problema usando um cenário simples baseado em ODBC
Configure um banco de dados espelhado:
crie um login no primário
USE Mirroring
CREATE LOGIN MirrorUser WITH PASSWORD = 'MyPassHere', DEFAULT_DATABASE = 'Mirroring'
CREATE USER MirrorUser
ALTER ROLE db_datareader ADD MEMBER MirrorUser
e o secundário:
CREATE LOGIN MirrorUser WITH PASSWORD = 'MyPassHere',SID = <Sid from primary here>
Configure uma tabela vinculada em um banco de dados Access
Faça failover do banco de dados para o secundário:
ALTER DATABASE Mirroring SET PARTNER FAILOVER
Abra a tabela vinculada do Access e verifique se podemos ver os dados após o failover:
Observe o erro em .\PROD
No Espelhamento de Banco de Dados, o failover é detectado tentando se conectar primeiro ao principal e, se isso falhar, o driver tenta se conectar ao
failover partner
servidor. Portanto, se você tiver um aplicativo configurado sem pool de conexões e codificado para não manter conexões entre solicitações de bancos de dados, o primário verá tentativas de login, mas as negará se o login tiver sua propriedade "banco de dados padrão" definida como uma das bancos de dados espelhados.Também pode ser que você tenha uma cadeia de conexão mal configurada em algum lugar que não tenha o
failover partner
parâmetro configurado. A mensagem de erro no log de erros mostra qual cliente está apresentando falhas de login - o que pode ajudá-lo a rastrear onde está o problema. Você também pode ter várias cadeias de conexão configuradas em seu aplicativo cliente e uma das cadeias não tem ofailover partner
parâmetro.Além disso, o Database Mirroring está marcado como obsoleto e pode ser removido de uma versão futura do SQL Server . A substituição, que funciona um pouco melhor, são os Grupos de Disponibilidade. Eu consideraria migrar para Grupos de Disponibilidade, pois isso simplificará significativamente as migrações para novo hardware ou a migração para a nuvem por meio de Grupos de Disponibilidade Distribuídos , que são suportados no SQL Server 2016+.