Recentemente, migramos nosso banco de dados de distribuição do SQL Server para um cluster de failover de várias sub-redes e descobrimos que, ocasionalmente, ao adicionar artigos/visualizar o status de replicação do editor, obtemos erros como:
Não é possível inicializar o objeto de fonte de dados do provedor OLE DB "SQLNCLI11" para o servidor vinculado "repl_distributor". (Provedor de dados .Net SqlClient)
Isso parece ser devido à conexão do servidor vinculado falando com um cluster de failover de várias sub-redes (conforme descrito aqui )
Além de seguir a solução de implementar uma conexão ODBC em cada nó de nosso editor (também um cluster de failover de várias sub-redes), há mais alguma coisa que possamos tentar para corrigir os servidores vinculados que se conectam a uma FCI de várias sub-redes?
A solução à qual você vinculou supera o problema de conectar-se a grupos de failover de várias sub-redes usando a
MultiSubnetFailover=True
configuração da cadeia de conexão.A maneira como essa configuração lida com o problema é tentar muitas conexões em paralelo, em vez de uma após a outra (o comportamento padrão). Isso aumenta as chances de que uma conexão seja feita com sucesso antes de atingir o limite de tempo limite de conexão.
Se você não quiser usar essa opção (você mencionou não querer a sobrecarga de configurar conexões ODBC em todos os servidores de cluster), outra solução seria aumentar a configuração de tempo limite de conexão no nível do servidor (vinculado) para um valor alto o suficiente para lidar com as tentativas de conexão serial.
O tempo limite de conexão padrão em servidores vinculados é de 10 segundos (representado por "0" na tela de configurações). Você pode aumentar o tempo limite para 20 segundos fazendo o seguinte:
Se você precisar alterar o tempo limite de conexão para algo maior porque segundos 20 segundos é muito baixo:
Os documentos sobre o valor padrão para "tempo limite de conexão" são um pouco confusos.
sp_serveroption
dizsp_configure
não suporta uma opção chamada "tempo limite de conexão", mas tem uma chamada "tempo limite de login remoto" (consulte Opções de configuração do servidor ). A descrição daqui parece o que estamos procurando:Na prática, acabei de criar um servidor vinculado localmente com as configurações padrão, desliguei a instância de destino e tentei consultá-la. Tempo limite de 10 segundos =)
Somando-se ao que jadarnel27 já disse, a versão mais recente dos drivers OLEDB suporta
MultiSubnetFailover=True
https://blogs.msdn.microsoft.com/sqlnativeclient/2018/03/30/released-microsoft-ole-db-driver-for-sql-server/