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!
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
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.
Ceci est un exemple minimal mais complet sur la façon de se connecter à base de données SQL Azure avec isql
from 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 tsql
devrait 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
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.)
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!