[RESOLVIDO] Adaptive Server is unavailable

Pessoal,

Tenho dois bancos de dados MS SQL Server 2014 aqui. Um de desenvolvimento e testes e outro de produção. Eles ficam em máquinas distintas, cada uma rodando sob Windows Server 2008.

No ambiente de desenvolvimento Scriptcase, apenas para o banco de teste, estou recebendo o seguinte erro ao configurar a conexão:

Falha na conexão. Connection attempt failed: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (10.131.0.16:1433) (severity 9)

Isso passou a ocorrer do nada. Talvez por atualização automática do banco de dados ou do S.O. na máquina de teste (e que ainda não atualizou na máquina de produção).

O curioso é que, se eu configuro o ambiente de desenvolvimento para acessar o banco de produção, o problema desaparece. Mas se eu volto para o IP do banco de teste, ele retorna.

Ou seja, tem algo diferente da máquina de banco de teste com o banco de produção.

Cheguei a encontrar num fórum da StackOverflow que eu deveria criar a conexão sem especificar a porta padrão 1433. Então fiz essa tentativa e funcionou, em princípio: se eu deixo 0 (ou branco) no campo PORTA, o Scriptcase confirma a conexão com o Banco e aceita salvar.

Porém, quando vou executar a aplicação (ainda no desenvolvimento), volto ao mesmo erro:

Ocorreu um erro durante a conexão com o banco de dados: Connection attempt failed: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (10.131.0.16:0) (severity 9)

Alguém tem alguma ideia do que poderia ser isso?

Depois de muita tentativa, descobri o problema.

O banco de testes tinha uma instância nomeada configurada (não foi usado a instância default). Durante a instalação, o SQL Server atribui a porta 1433 apenas para instância default. Para as nomeadas, a porta é escolhida de forma aleatória a cada inicialização do serviço.

Dessa forma, quando eu criava a conexão no Scriptcase e definia a porta 1433, ele não conseguia acesso (afinal, essa não era a porta certa).

O problema não acontecia no Banco de Produção porque ele foi criado com instância default, que sempre usa a porta 1433.

Para a equipe de desenvolvimento Scriptcase, sugiro que, ao deixarmos a porta em branco na configuração da conexão, o Scriptcase não use nenhuma porta (atualmente ele usa porta 0 se estiver em branco e isso foi minha dor de cabeça).

Para bancos com instância nomeadas, nunca devemos definir a porta (pelo fato de ser aleatória). Pois, ao chamarmos o “servername\instancia” o próprio MS SQL encontra a porta correta e estabelece a conexão.

Minha solução foi entrar na minha máquina Windows Server, onde estava hospedado o banco de testes, abrir o SQL Server Configuration Manager e “forçar” ele a ouvir pela porta 1433 sempre. Abaixo está um link que ajuda sobre isso:

https://docs.microsoft.com/pt-br/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port?view=sql-server-2017