Connexion de MS SQL à l'aide de freetds et unixodbc: isql - aucun pilote par défaut spécifié


28

J'essaie de me connecter à la base de données MS SQL en utilisant freetds et unixodbc . J'ai lu divers guides sur la façon de le faire, mais personne ne fonctionne bien pour moi. Lorsque j'essaie de me connecter à la base de données à l'aide de l' outil isql , j'obtiens l'erreur suivante:

$ 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 a-t-il déjà réussi à établir la connexion à la base de données MS SQL en utilisant freetds et unixodbc sur Ubuntu 12.04? J'apprécierais volontiers de l'aide.

Voici la procédure que j'ai utilisée pour configurer les freetds et unixodbc . 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é les 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 peux me connecter avec succès à la base de données en exécutant

tsql -S TS -U username -P password

Comme je l' ai besoin d' une odbc connexion I 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

La tentative de connexion à la base de données à l'aide de l' outil isql avec une telle configuration entraîne l'erreur suivante:

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

Pour utiliser tsql:sudo apt-get install freetds-bin
Stevie G

Réponses:


17

Merci, votre message m'a été très utile. J'ai pu le faire fonctionner en supprimant 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 n'arrive toujours pas à le faire fonctionner avec RODBC mais cela a fonctionné avec isql.

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


Merci, définitivement lié au pilote manquant/etc/odbcinst.ini
Dejan

1
Hé bonne réponse mais malheureusement je n'ai pas pu le faire fonctionner, même si vous copiez vos fichiers. des pensées sur la raison pour laquelle? c'est à peu près la même chose, sauf que sur la partie SERVEUR j'utilise une IP pas un nom. pensez-vous que ce pourrait être ça? merci beaucoup
Pedro Braz

14

Il s'agit d'un exemple minimal mais complet de connexion à Azure SQL Database avec à isqlpartir d'Ubuntu 14.04.1 LTS. L'exemple est extrait de Comment connecter la base de données SQL Azure à partir d'Ubuntu (avertissement: c'est mon wiki personnel).

Installer les packages nécessaires

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

Configurer FreeTDS

Fichier /etc/freetds/freetds.conf

[global]
tds version = 7.1

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

Tester la connexion

À ce stade, la connexion avec tsqldevrait fonctionner:

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

Notez que cela @<HOST>est obligatoire. Sinon, la connexion se termine avec 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

Configurer le pilote ODBC

Fichier /etc/odbcinst.ini

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

Configurer les sources de données ODBC

Fichier /etc/odbc.ini

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

<SERVERNAME>est le même qu'en freetds.conf.

Connectez-vous 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 cela @<HOST>est obligatoire. Sinon, la connexion se termine avec 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

Le @<HOST>ne semble plus être nécessaire.
Adrian Keister

7

Dans mon cas, le problème est survenu à cause de simples retraits dans mon fichier de configuration. Donc en dedans /etc/odbc.ini, j'ai supprimé tous les tirets et le tour est joué!

( odbcinst.iniSe comporte comme un enfant normal et ne semble pas faire de caprices.)


JE VOUS REMERCIE! J'ai observé que cette config pendant 2 heures essayait de comprendre que l'espace blanc était le problème.
Alex Barker

3

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

L'ancien chemin du pilote était:

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

Je l'ai changé en:

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!


La ligne de configuration est-elle obsolète, maintenant?
Adrian Keister
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.