Eu tive o mesmo problema com o SQL Server 2014 instalado localmente instância nomeada. Conectar usando o FQDN\InstanceName
falharia, enquanto conectar usando apenas o meu hostname\InstanceName
funcionou. Por exemplo: conectando usando mycomputername\sql2014
funcionou, mas usando mycomputername.mydomain.org\sql2014
não. DNS resolvido corretamente, TCP / IP foi ativado no SQL Configuration Manager, adicionadas regras do Firewall do Windows (e depois desativado o firewall para teste para garantir que não estava bloqueando nada), mas nenhum deles corrigiu o problema.
Por fim, tive que iniciar o serviço " SQL Server Browser " no SQL Server e isso corrigiu o problema de conectividade.
Eu nunca havia percebido que o serviço Navegador do SQL Server realmente ajudava o SQL Server a fazer conexões; Fiquei com a impressão de que ele simplesmente ajudou a preencher as listas suspensas quando você clicou em "procurar mais" servidores para se conectar, mas na verdade ajuda a alinhar as solicitações do cliente com o número da porta correto a ser usado, se o número da porta não for atribuído explicitamente (semelhante como as ligações do site ajudam a aliviar o mesmo problema em um servidor Web IIS que hospeda vários sites).
Este item de conexão foi o que me deu a pista sobre o serviço Navegador do SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- nome
- quando você usa wstst05 \ sqlexpress como um nome de servidor, o código do cliente separa o nome da máquina do nome da instância e o wstst05 é comparado com o nome netbios. Não vejo problema em corresponder e a conexão é considerada local. A partir daí, recuperamos as informações necessárias SEM entrar em contato com o Navegador SQL e conectamos à instância SQL via Memória compartilhada sem nenhum problema.
- quando você usa wstst05.capatest.local \ sqlexpress, o código do cliente falha na comparação do nome (wstst05.capatest.local) com o nome netbios (wstst05) e considera a conexão "remota". Isso ocorre por design e, definitivamente, consideraremos melhorar isso no futuro. De qualquer forma, devido a considerar a conexão remota e o fato de ser uma instância nomeada, o cliente decide que precisa usar o SQLBrowser para resolução de nomes. Ele tenta entrar em contato com o SQL Browser em wstst05.capatest.local (porta UDP 1434) e, aparentemente, essa parte falha. Daí o erro que você recebe.
O motivo do serviço "Navegador do SQL Server" do TechNet (ênfase adicionada por mim): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx
Na seção "Usando o SQL Server Browser":
Se o serviço Navegador do SQL Server não estiver em execução, você ainda poderá se conectar ao SQL Server se fornecer o número da porta correto ou o pipe nomeado. Por exemplo, você pode conectar-se à instância padrão do SQL Server com TCP / IP se estiver executando na porta 1433. No entanto, se o serviço Navegador do SQL Server não estiver em execução, as seguintes conexões não funcionarão :
- Qualquer componente que tenta se conectar a uma instância nomeada sem especificar totalmente todos os parâmetros (como a porta TCP / IP ou o pipe nomeado) .
- Qualquer componente que gera ou passa informações de servidor \ instância que posteriormente poderiam ser usadas por outros componentes para se reconectar.
- Conectando-se a uma instância nomeada sem fornecer o número da porta ou o pipe.
- DAC para uma instância nomeada ou a instância padrão, se não estiver usando a porta TCP / IP 1433.
- O serviço de redirecionador OLAP.
- Enumerando servidores no SQL Server Management Studio, Enterprise Manager ou Query Analyzer.
Se você estiver usando o SQL Server em um cenário cliente-servidor (por exemplo, quando seu aplicativo estiver acessando o SQL Server por uma rede), se você parar ou desabilitar o serviço Navegador do SQL Server, deverá atribuir um número de porta específico a cada instância e escreva o código do aplicativo cliente para sempre usar esse número de porta. Essa abordagem tem os seguintes problemas :
- Você deve atualizar e manter o código do aplicativo cliente para garantir que ele esteja se conectando à porta apropriada.
- A porta que você escolher para cada instância pode ser usada por outro serviço ou aplicativo no servidor, fazendo com que a instância do SQL Server fique indisponível.
E mais informações do mesmo artigo da seção "Como o navegador do SQL Server funciona":
Porque apenas uma instância do SQL Server pode usar uma porta ou canal, diferentes números de porta e nomes de canal são atribuídos para instâncias nomeadas, incluindo o SQL Server Express. Por padrão, quando ativada, as instâncias nomeadas e o SQL Server Express são configurados para usar portas dinâmicas, ou seja, uma porta disponível é atribuída quando o SQL Server é iniciado. Se desejar, uma porta específica pode ser atribuída a uma instância do SQL Server. Ao conectar, os clientes podem especificar uma porta específica; mas se a porta for atribuída dinamicamente, o número da porta poderá ser alterado sempre que o SQL Server for reiniciado; portanto, o número da porta correto é desconhecido para o cliente. ... Quando os clientes do SQL Server solicitam recursos do SQL Server, a biblioteca de rede do cliente envia uma mensagem UDP ao servidor usando a porta 1434. O SQL Server Browser responde com a porta TCP / IP ou o pipe nomeado da instância solicitada.