Conectando o MS SQL usando freetds e unixodbc: isql - nenhum driver padrão especificado

27

Estou tentando conectar-me ao banco de dados MS SQL usando freetds e unixodbc . Eu li vários guias como fazê-lo, mas ninguém trabalha bem para mim. Quando tento conectar-me ao banco de dados usando a ferramenta isql , recebo o seguinte erro:

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect

Alguém já estabeleceu com sucesso a conexão com o banco de dados MS SQL usando freetds e unixodbc no Ubuntu 12.04? Eu realmente aprecio alguma ajuda.

Abaixo está o procedimento que usei para configurar o freetds e o unixodbc . Obrigado pela sua ajuda antecipadamente!

Procedimento

Primeiro, instalei os seguintes pacotes com:

sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc

e configurados freetds da seguinte forma:

--- /etc/freetds/freetds.conf ---
[TS]
host = SERVER
port = 1433
tds version = 7.0
client charset = UTF-8

Usando a ferramenta tsql , posso conectar-me com êxito ao banco de dados executando

tsql -S TS -U username -P password

Como eu preciso de uma conexão odbc eu configurei odbcinst.ini como segue:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

e odbc.ini da seguinte forma:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Servername = SERVER
Server = SERVER
Port = 1433
Database = DBNAME
Trace = No

Tentar se conectar ao banco de dados usando a ferramenta isql com essa configuração resulta no seguinte erro:

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
    
por Dejan 24.07.2012 / 15:42

4 respostas

16

Obrigado, seu post foi muito útil para mim. Consegui fazê-lo funcionar eliminando as seguintes linhas do meu arquivo odbcinst.ini

Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

agora meu arquivo odbcinst.ini é assim:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

e meu arquivo odbc.ini tem esta aparência agora:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Server = SERVER
Port = 1433
Database = DBNAME

Depois que simplifiquei tudo, funcionou muito bem. Ainda não consigo trabalhar com o RODBC, mas funcionou com o isql.

Eu não sei se isso vai ajudar, mas seu post me ajudou. Obrigado.

    
por John Cutsinger 29.10.2012 / 22:19
12

Este é um exemplo mínimo, mas completo, de como conectar-se ao Banco de Dados SQL do Azure com isql do Ubuntu 14.04.1 LTS O exemplo é extraído de Como conectar o banco de dados SQL do Azure ao Ubuntu (disclaimer: é o meu wiki pessoal).

Instalar os pacotes necessários

$ sudo apt-get -y install freetds-bin tdsodbc unixodbc

Configurar o FreeTDS

Arquivo /etc/freetds/freetds.conf

[global]
tds version = 7.1

[<SERVERNAME>]
host = <HOST>.database.windows.net
port = 1433

Conexão de teste

Neste ponto, conectar-se a tsql deve funcionar:

$ tsql -S <SERVERNAME> -U <USERNAME>@<HOST> -P <PASSWORD>

Observe que @<HOST> é obrigatório. Caso contrário, a conexão termina com um erro:

Msg 40531 (severity 11, state 1) from [<SERVERNAME>] Line 1:
    "Server name cannot be determined.  It must appear as the first segment of the server's dns name (servername.database.windows.net).  Some libraries do not send the server name, in which case the server name must be included as part of the user name (username@servername).  In addition, if both formats are used, the server names must match."
Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server

Configurar o driver ODBC

Arquivo /etc/odbcinst.ini

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Configurar as fontes de dados ODBC

Arquivo /etc/odbc.ini

[<DATA_SOURCE_NAME>]
Driver = FreeTDS
Servername = <SERVERNAME>
Port = 1433
Database = <DBNAME>

<SERVERNAME> é o mesmo que em freetds.conf .

Conecte-se ao isql

$ isql -v <DATA_SOURCE_NAME> <USER>@<HOST> <PASSWORD>
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select current_timestamp
+------------------------+
|                        |
+------------------------+
| 2015-01-02 09:05:55.593|
+------------------------+
SQLRowCount returns 1
1 rows fetched
SQL>

Observe que @<HOST> é obrigatório. Caso contrário, a conexão termina com um erro:

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[37000][unixODBC][FreeTDS][SQL Server]Server name cannot be determined.  It must appear as the first segment of the server's dns name (servername.database.windows.net).  Some libraries do not send the server name, in which case the server name must be included as part of the user name (username@servername).  In addition, if both formats are used, the server names must match.
[ISQL]ERROR: Could not SQLConnect
    
por user272735 02.01.2015 / 10:18
6

No meu caso, o problema surgiu por causa de recuos simples no meu arquivo de configuração. Então, em /etc/odbc.ini , removi todos os recuos e voila!

( odbcinst.ini se comporta como uma criança normal e não parece jogar birra).

    
por Sudhanshu 04.09.2014 / 06:01
3

O Ubuntu anterior a 12.04 tinha um caminho odbc diferente no arquivo /etc/odbcinst.ini.

O caminho do driver antigo era:

Driver = /usr/lib/odbc/libtdsodbc.so

Eu mudei para:

Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Veja a configuração completa:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = tdsodbc
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout = 5
CPReuse = 5

Funciona como um charme agora! Obrigado!

    
por MikeH 10.05.2013 / 22:06