Estou tentando configurar o acesso TCP à minha instância nomeada do SQL Server (chamada SQL2012). Eu uso o estúdio de gerenciamento para conectar ao mecanismo de banco de dados. Eu digito o nome do servidor: "tcp:localhost\SQL2012" e recebo esta mensagem de erro:
(provedor: SQL Network Interfaces, erro: 26 - Erro ao localizar o servidor/instância especificado)
Este post da equipe do SQL Server parece ser muito útil, nele eles sugerem testar o serviço SqlBrowser usando PortQry. Quando faço isso, recebo esta informação:
Querying target system called:
localhost
Attempting to resolve name to IP address...
Name resolved to 127.0.0.1
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName MSWART7
InstanceName SQL2012
IsClustered No
Version 11.0.5058.0
tcp 52329
♥K K P☺K 5 - 2 1 qK 1 4 rK 8 7 0☺ 1 qK
==== End of SQL Server query response ====
E com certeza, consigo me conectar ao banco de dados quando especifico o nome do servidor "tcp:localhost,52329"
Não tenho certeza do que estou perdendo. O SQL Browser parece estar funcionando e as portas e firewalls parecem estar abertas ou irrelevantes (estou tentando me conectar ao localhost).
Onde eu olho em seguida?
Quando você tenta se conectar a uma instância local, o SQL Server sempre tentará usar a memória compartilhada. Esta conexão funcionará bem:
Isso funciona no meu cenário, e a conexão está realmente usando a memória compartilhada neste caso.
Resultados:
Se você quiser tentar substituir a memória compartilhada (não sei por que, em uma máquina local) e forçar o TCP/IP, você não pode misturar isso com a especificação da instância nomeada explicitamente, pelo menos em todas as instâncias que tentei (sem trocadilhos ). A instância nomeada força o SQL Server a mapear o nome da instância para o número da porta, usando o navegador SQL Server, mas isso aparentemente não pode ser feito quando você força o TCP/IP em primeiro lugar (o objetivo de usar o TCP/IP é tão você vai direto para a porta e não se incomoda com o navegador). Se sua instância nomeada estiver sendo executada em seu próprio endereço IP e forçada à porta 1433, você poderá fazer isso funcionar; você também poderá fazê-lo funcionar se estiver usando um alias de rede de clientes (mas eu não consegui ).
Consegui me conectar se procurasse a porta dinâmica atual atribuída a essa instância no Configuration Manager (no meu caso, era 49538) e, em seguida, conectei usando
tcp:localhost,49538
:Então agora:
Resultados:
Todas as variações que tentei - em várias máquinas e versões - em que tentei combinar uma instância nomeada com a substituição de memória compartilhada e usar TCP/IP em vez disso - geraram o mesmo erro que você recebeu. Isso ocorre quando prefixei o nome do servidor/instância com
tcp:
e quando especifiquei TCP/IP para o protocolo de rede na caixa de diálogo de propriedades da conexão.Para encurtar a história: se você realmente precisar forçar o TCP/IP para uma conexão local, precisará usar uma porta fixa para essa instância e especificar a porta. Ou use 1433 (que só funcionará se não houver uma instância padrão ou se você tiver um endereço IP dedicado para essa instância), então você não precisará especificar a porta, mas ainda precisará especificar o
tcp:
prefixo ou usar isso opção na caixa de diálogo de conexão.Não sugiro tentar desabilitar a memória compartilhada. FWIW.