Recentemente, troquei os servidores de banco de dados (bancos de dados restaurados do antigo para o novo e depois troquei os IPs) ...
Antigo: Sql Server 2005, Windows Server 2003 Novo: Sql Server 2008, Windows Server 2012
Todos os processos que se conectam ao servidor (site dot net, PHP, vbscript, mssql) de uma VPN geograficamente próxima funcionam bem no novo servidor.
Mas temos uma VPN entre o servidor (UK) e um escritório satélite (KY USA) e um aplicativo de banco de dados em execução no Microsoft Access, e esse aplicativo está gerando um erro ao realizar consultas no novo servidor. O erro é....
Erro: ODBC--falha na chamada.
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionRead (recv()). (#10054) [Microsoft][ODBC SQL Server Driver][DBNETLIB]Erro geral de rede. Verifique a documentação da sua rede. (#11)
Se eu tiver temporariamente esse aplicativo consultando o servidor antigo (alterando o arquivo hosts local) o erro não ocorre e tudo funciona.
Para ajudar na solução de problemas, criei um pequeno script ...
'ConString="Provider=SQLOLEDB;Data Source=172.17.201.11,1433;" & _
' "OLE DB Services=-2;Initial Catalog=Perf;Network=DBMSSOCN;User Id=*;Password=*"
ConString="Provider=SQLOLEDB;Data Source=172.17.201.11,1433;" & _
"Initial Catalog=Perf;Network=DBMSSOCN;User Id=*;Password=*"
set conn = CreateObject("ADODB.Connection")
Conn.connectiontimeout=500
Conn.commandtimeout=500
conn.open ConString
SCRIPTTIMEOUT = 1000
'sqlstring="SELECT top 100 ClientID FROM Clients"
sqlstring="SELECT top 1000 ClientID FROM Clients"
'sqlstring="SELECT ClientID FROM Clients"
'succeeds with top 100
'fails with top 1000 or no limit
set Rcount = Conn.Execute(sqlstring)
msgbox Rcount(0)
Rcount.Close
set Rcount = Nothing
set sqlstring = Nothing
Conn.Close
set Conn = Nothing
O script funciona se eu consultar 100 linhas. Se eu tentar 1000, ele falha todas as vezes (eu não tentei quantidades intermediárias, mas não vejo muito sentido em reduzi-lo)
O script funciona se eu mudar o endereço IP para o servidor antigo (todo o resto é o mesmo - mesma vpn, mesmo cliente, mesmo script)
O script e o aplicativo de acesso funcionam bem em todos os sentidos em uma VPN diferente (também no Reino Unido)
- Eu vasculhei todas as configurações que posso encontrar em cada servidor (no MS SQL Studio, Configuration Manager, Network Settings) para tentar corresponder e experimentar configurações diferentes.
- Eu parei e iniciei serviços
- Eu pesquisei isso e tentei todas as sugestões que pude encontrar (perdi o controle, mas tentei adicionar
OLE DB Services=-2
. TenteiEncrypt=on
(e desativei). TenteiTrusted_connection=on
(e desativei). TenteiPooling=on
(e desativei). tentei especificar o nome da instância após o IP.
Ambos os servidores estão no mesmo rack físico, na mesma rede/sub-rede, conectados ao mesmo switch físico.
Antes de seguir o caminho de mexer nas configurações da VPN, trocar os fios (exigindo acesso ao DC), há algo que eu possa/deveria fazer/olhar no novo servidor para ajudar?
Edit: Se eu adicionar Packet Size=1024;
à minha string de conexão, funciona! O problema é que ambos os servidores têm definido como 4096 por padrão, e o servidor antigo funciona bem com isso.
Editar 2 O acima funcionou para o meu script de teste, mas não para o aplicativo de acesso.
Espero encontrar uma solução alternativa que não exija uma alteração da cadeia de conexão porque isso será um aborrecimento (envolvendo o desenvolvedor do aplicativo de acesso)
Não é minha solução ideal (como eu esperava evitar alterar as strings de conexão), mas resolvi isso no meu script de teste adicionando
Packet Size=1024
à string de conexão.Isso não funcionou para o aplicativo Access. No entanto, criei um pequeno aplicativo de acesso de teste e, ao fazer isso, consegui descobrir que a alteração não estava funcionando no aplicativo principal do Access porque a cadeia de conexão estava usando um driver e campos diferentes. Usando a mesma cadeia de conexão no aplicativo Access que eu estava usando no meu script de teste, funcionou.
Portanto, parece que a
Packet Size=1024
configuração não é reconhecida ou é ignorada na string de conexão do seguinte formato ...Mas funciona na cadeia de conexão alternativa ...