web-dev-qa-db-fra.com

Connexion de MS SQL en utilisant freetds et unixodbc: isql - aucun pilote par défaut spécifié

J'essaie de me connecter à la base de données MS SQL à l'aide de freetds et nixodbc. J'ai lu divers guides sur la façon de le faire, mais personne ne fonctionne très bien pour moi. Lorsque j'essaie de me connecter à la base de données à l'aide de l'outil isql, le message d'erreur suivant s'affiche:

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

Quelqu'un at-il déjà établi avec succès la connexion à la base de données MS SQL à l’aide de freetds et nixodbc sur Ubuntu 12.04? J'apprécierais volontiers de l'aide.

Ci-dessous, la procédure que j'ai utilisée pour configurer les freetds et nixodbc. Merci d'avance pour votre aide!

Procédure

Tout d'abord, j'ai installé les packages suivants avec:

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

et configuré freetds comme suit:

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

En utilisant l’outil tsql, je parviens à me connecter à la base de données en exécutant

tsql -S TS -U username -P password

Comme j'ai besoin d'une connexion odbc j'ai configuré odbcinst.ini comme suit:

--- /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

et odbc.ini comme suit:

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

Si vous essayez de vous connecter à la base de données à l'aide de l'outil isql avec une telle configuration, l'erreur suivante apparaît:

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

Merci, votre message m'a été très utile. J'ai pu le faire fonctionner en éliminant les lignes suivantes de mon fichier odbcinst.ini

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

alors maintenant, mon fichier odbcinst.ini ressemble à ceci:

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

et mon fichier odbc.ini ressemble à ceci maintenant:

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

Une fois que j'ai tout simplifié, cela a très bien fonctionné. Je ne peux toujours pas le faire fonctionner avec RODBC mais cela a fonctionné avec isql.

Je ne sais pas si cela aidera, mais votre message m'a aidé. Merci.

17
John Cutsinger

Ceci est un exemple minimal mais complet sur la façon de se connecter à base de données SQL Azure avec isqlfrom Ubuntu 14.04.1 LTS. L'exemple est extrait de Comment connecter une base de données SQL Azure à partir d'Ubunt (disclaimer: c'est mon wiki personnel).

Installez les packages nécessaires

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

Configurez FreeTDS

Fichier /etc/freetds/freetds.conf

[global]
tds version = 7.1

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

Testez la connexion

À ce stade, la connexion avec tsqldevrait fonctionner:

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

Notez que @<Host> est requis. Sinon, la connexion se termine par une erreur:

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

Configurez le pilote ODBC

Fichier /etc/odbcinst.ini

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

Configurez ODBC sources de données

Fichier /etc/odbc.ini

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

<SERVERNAME> est le même que dans freetds.conf.

Se connecter avec 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>

Notez que @<Host> est requis. Sinon, la connexion se termine par une erreur:

[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
14
user272735

Dans mon cas, le problème est dû à de simples retraits dans mon fichier de configuration. Donc, dans /etc/odbc.ini, I enlevé tous les tirets et le tour est joué!

(odbcinst.ini se comporte comme un enfant normal et ne semble pas lancer de colère.)

7
Sudhanshu

Avant le 12.04, Ubuntu avait un chemin odbc différent dans le fichier /etc/odbcinst.ini.

L'ancien chemin d'accès était:

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

Je l'ai changé pour:

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

Voici la configuration complète:

--- /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

Ça fonctionne parfaitement maintenant! Merci!

3
MikeH