Como obtenho essa conexão ODBC do SQL Server funcionando?


30

Nota: Obviamente, mudei os nomes dos servidores e IPs para nomes fictícios.

Aqui está o que está acontecendo. Eu tenho um servidor que estou chamando MYSERVERexecutando o Microsoft SQL Server Express 2005. Nesse servidor, eu tenho uma conexão ODBC configurada apontando para si mesma, e isso já funciona perfeitamente. Efetuo login usando a Autenticação do SQL Server (não a autenticação do Windows), e é configurado assim:

Imagem de boa conexão ODBC

Como eu disse, esse funciona. Mas, a seguir, tenho outro computador que está em um domínio totalmente diferente / não na intranet, que precisa acessar o mesmo SQL Server hospedado no MYSERVER. Por estar em um domínio diferente, ele não reconhece o nome "MYSERVER"; Eu tenho que apontar para o endereço IP do MYSERVER, que diremos é 123.456.789.012. Mas a conexão ODBC não parece funcionar lá. Eu tentei configurá-lo assim:

Imagem de conexão ODBC incorreta

Isso não funciona. Quando insiro o nome de usuário e a senha e pressiono Avançar, ele fica parado por uns 10 a 20 segundos e, finalmente, volta com o seguinte erro:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Se eu tentar a mesma coisa, mas alterar o "servidor" 123.456.789.012\SQLEXPRESSpara simplesmente antigo 123.456.789.012, recebo um erro diferente:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Agora eu sei o que você está pensando. Você pode estar pensando: "duh, você provavelmente não abriu o firewall para a porta 1433, idiota". Exceto que fiz e verifiquei isso, pois posso executar com êxito :

telnet 123.456.789.012 1433

... a partir da linha de comando, tudo o que eu quero. Então, eu não tenho certeza do que fazer. Eu sei que o SQL Server existe, funciona e uma conexão ODBC pode ser configurada corretamente; Só não tenho certeza do que há de errado nas minhas configurações de conexão que estão lançando esses erros. Com base no último erro que listei, parece que ele pode se conectar ao servidor, mas simplesmente não consegue encontrar a instância (já que eu não especifiquei uma dessa vez). Então, isso significa que eu só preciso usar alguma sintaxe diferente para especificar o IP junto com o nome de uma instância? O que eu faço? Desde já, obrigado.

Respostas:


18

Os pipes nomeados e os protocolos TCIP para o SQL Server 2005 estão desativados por padrão. Você os ativou em "Gerenciador de configuração do SQL Server"? Você pode encontrar os protocolos na configuração de rede do SQL Server e na configuração do SQL Native Client xx.

A conexão no próprio servidor funciona graças ao protocolo "Memória compartilhada".


9
Estou aceitando sua resposta porque ela me colocou no caminho certo. No SQL Server Configuration Manager, o TCP / IP já estava ativado o tempo todo em "Configuração de rede do SQL Server 2005> protocolos para SQLEXPRESS" e "Configuração do cliente nativo do SQL> protocolos de cliente". Pipes nomeados já estava ativado no último. Eu o habilitei no primeiro, mas isso não pareceu ajudar (mesmas mensagens de erro). Por fim, troquei a fonte ODBC para usar o driver "SQL Native Client" em vez do driver "SQL Server" e, finalmente, funcionou.
9789 soapergem

Obrigado SoaperGEM! Eu nunca teria pensado em experimentar o SQL Native Client! Trabalhou como um encanto!
precisa

5

Você ativou o serviço Navegador do SQL Server de acordo com Como configurar o SQL Server 2005 para permitir conexões remotas ?

Se você estiver executando o SQL Server 2005 usando um nome de instância e não estiver usando um número de porta TCP / IP específico em sua cadeia de conexão, habilite o serviço Navegador do SQL Server para permitir conexões remotas. Por exemplo, o SQL Server 2005 Express é instalado com um nome de instância padrão Nome do Computador \ SQLEXPRESS.


A conexão com o servidor \ instância no local usa um mecanismo diferente do que remotamente?
Sam

@ Sam, veja Hakan Winther responder.
Sim

4

Esse encadeamento corrigiu a mesma mensagem de erro ao usar o Access para conectar-se a um servidor MSSQL 2008. O MSSQL 2005 e versões anteriores funcionaram bem apenas usando o nome do computador na cadeia de conexão, mas tive que mudar para a cadeia de conexão no Access para o formulário completo quando a instância foi atualizada para 2008:

servername\instancename,portnumber


2
Fiz isso por mim, exceto que eu não precisava do número da porta.
precisa saber é o seguinte

2

Eu tive esse mesmo problema e consegui resolvê-lo alterando o driver SQL para o driver SQL Native Client também. Isso foi estranho, pois no meu caso, isso funcionava bem há anos e depois parou de funcionar. Eu suspeito que isso seja algo parecido com o driver estar corrompido, talvez uma reinstalação do MDAC possa ajudar, mas por enquanto estou feliz que esteja funcionando!


1

Ele reconheceria o nome do servidor se fosse totalmente qualificado? Se fosse MYSERVER.domínio.com? Tivemos que fazer isso com o SQL Server ao conectar-se de um domínio diferente. Se você conseguir conectar o DSN do sistema ODBC ao testar a fonte de dados, estará progredindo. Se ele não se conectar à configuração do ODBC, você precisará corrigi-lo primeiro.


É exatamente isso que estou tentando fazer - fazer com que o DSN do sistema ODBC se conecte em primeiro lugar ao testar a fonte de dados. Então, tentei sua sugestão, tentando ambos MYSERVER.domain.com\SQLEXPRESSe MYSERVER.domain.com, mas esses dois me deram os mesmos erros que listei acima, respectivamente.
soapergem 6/11/2009

Em um prompt de comando no outro computador, digite "nslookup MYSERVER.domain.com" - isso resolve o endereço IP correto (123.456.789.012) ou o mesmo?
Sim

@ Sim - Sim, esse comando é resolvido corretamente.
7689 soapergem

1

Você está usando pipes nomeados ou TCP na conexão ODBC que funciona? O TCP está ativado?


1

Verifique se você possui os conectores tcp remotos habilitados para o servidor SQL.


0

Apenas um tiro selvagem aqui, mas o que acontece se você colocar uma barra invertida dupla antes do nome do servidor ou endereço IP? Parece-me que normalmente é necessário para a maioria das outras conexões Windows / Microsoft.


Tentar a barra invertida dupla resulta no mesmo erro 1326 (o primeiro que listei).
soapergem

0

Eu tive uma questão semelhante. No meu caso, outro sw configura a configuração ODBC para que eu não possa alterar o driver. Eu resolvi meu caso assim:

  1. Defina as configurações de TCP / IP para o servidor usar a porta 1433
  2. No cliente, digite o endereço do servidor como: 192.168.1.5,1433 (sem nome da instância)

Então começou a funcionar. SO cliente: Win7 x64 Driver: sqlsrv32.dll


0

Pelo que vale, comecei a receber esse erro em uma conexão que estava funcionando anteriormente. Acontece que o serviço MSSQL $ SQLEXPRESS havia sido interrompido de alguma forma. Reiniciar corrigiu o problema.


0

Eu também tinha esse problema e era simples: o servidor listado como servidor DNS primário para esse servidor foi removido e o aplicativo não conseguiu mais resolver corretamente o nome do servidor SQL na rede. Tudo imediatamente começou a funcionar novamente quando eu corrigi o servidor DNS local para um funcional.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.