Tenho 2 bancos de dados MSSQL que não fazem parte do mesmo cluster, mas são sincronizados manualmente (sem espelhamento de banco de dados configurado)
Quero que meus aplicativos cliente tentem se conectar ao primeiro host de banco de dados. Se falhar, ele deve se conectar ao segundo host de banco de dados.
Criei uma string de conexão (em Java) que se parece com isto:
String connectionString = "jdbc:sqlserver://<IP_ADDRESS_SERVER_1>:1433;"
+ "database=<DB_NAME>;"
+ "user=<USERNAME>;"
+ "password=<PASSWORD>;"
+ "encrypt=true;"
+ "trustServerCertificate=true;"
+ "failoverPartner=<IP_ADDRESS_SERVER_2>:1433;";
Ele se conecta corretamente à instância primária do banco de dados, mas se eu desligá-lo e a conexão for redirecionada para a segunda instância do banco de dados, a conexão será bloqueada. (conectar esta instância como primária funciona)
A conexão redirecionada depende de espelhamento?
Sim e não. Resumindo, o driver faz várias verificações, se ele não obtiver as informações corretas do servidor (porque o espelhamento não está configurado ou não está atingindo alguma funcionalidade pouco conhecida com AGs), então o driver lançará um erro de que o espelhamento não está configurado.
Você pode editar o driver Java, pois ele é de código aberto, alterar esse comportamento, compilá-lo e usá-lo em seu ambiente... ou, como sugerido nos comentários, usar uma arquitetura já disponível e comprovada para implementar sua alta disponibilidade.