A conexão com o servidor MSSQL usando o driver sqlcmd e odbc no RHEL 6 falha

4

Passei a última hora tentando se conectar a um servidor mssql usando o sqlcmd através do driver odbc. Eu estava falando com o db, mas ele não parece ter ideia do que está acontecendo ... Talvez você possa me ajudar a encontrar algumas perguntas que eu possa fazer a esse cara ..

Estou usando o driver odbc oficial da Microsoft. Aparentemente, estamos usando algum tipo de porta dinâmica.

Não há firewalls entre eles.

# odbcinst -q -d -n
[PostgreSQL]
[MySQL]
[ODBC Driver 11 for SQL Server]

Eu tentei de maneiras diferentes

Código de erro 0x2AF9:

sqlcmd -S hostname\DEV04 -U username -P password
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : TCP Provider: Error code 0x2AF9.

e

Erro ao localizar servidor / instância especificada [xFFFFFFFF].

sqlcmd -S hostname\DEV04 -U username -P password
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]. 

Usando o perl

DBI connect('DASHBOARD','username',...) failed: [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired (SQL-HYT00) [state was HYT00 now 08001]
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (SQL-08001)
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].  (SQL-08001) at ./test.pl line 4
Can't connect to : [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired (SQL-HYT00) [state was HYT00 now 08001]
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (SQL-08001)
[unixODBC][Microsoft][ODBC Driver 11 for SQL Server]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].  (SQL-08001) at ./test.pl line 4.
    
por Chris 27.02.2014 / 14:01

3 respostas

0

Eu estava acertando um problema semelhante. Acontece que a parte \DEV04 do hostname\DEV04 é usada para indicar que o cliente deve estar se conectando ao servidor em uma porta diferente do padrão. No mundo da Microsoft, usar DEV04 garante automaticamente que o cliente se conecte à porta correta ... mas isso não parece funcionar com o sqlcmd do Linux.

Pergunte ao administrador do SQL Server em qual porta a \DEV04 instance está escutando e conecte-se usando hostname,PORT

    
por 27.10.2016 / 06:23
0

Com base em uma sinopse daqui: link

O protocolo UDP simplesmente não funciona no Linux usando as ferramentas ODBC fornecidas pela Microsoft e o sqlcmd. A parte UDP é usada inicialmente para investigar o servidor para encontrar a porta TCP na qual o banco de dados solicitado está escutando.

O uso da solução no meu trabalho é mudar para o pymssql, que funcionará com a instância nomeada e as solicitações da porta UDP.

    
por 13.04.2018 / 21:55
0

Depois de ler este tópico: link

Eu tive que descobrir outro número de porta que o SQL Server estava escutando executando

USE MASTER 
GO 
xp_readerrorlog 0, 1, N'Server is listening on' 
GO

Resultado

2018-04-12 03:19:57.830 Server       Server is listening on [ 'any' <ipv6> 49155].                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
2018-04-12 03:19:57.830 Server       Server is listening on [ 'any' <ipv4> 49155]. 

adicione uma regra para o Firewall do Windows no host do SQL Server: - habilitando a porta específica 49155 (acho que isso pode variar)

Então este comando foi bem sucedido na minha máquina Ubuntu:

sqlcmd -Smyhost,49155 -U sa -P sa_pwd -d mydb -Q "select @@servername"
    
por 19.04.2018 / 09:45