MS SQL mit freetds und unixodbc verbinden: isql - kein Standardtreiber angegeben

28

Ich versuche, mit freetds und unixodbc eine Verbindung zur MS SQL-Datenbank herzustellen . Ich habe verschiedene Anleitungen gelesen, wie es geht, aber niemand funktioniert gut für mich. Wenn ich versuche, mit dem isql- Tool eine Verbindung zur Datenbank herzustellen , wird die folgende Fehlermeldung angezeigt :

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

Hat jemand die Verbindung zur MS SQL-Datenbank mit freetds und unixodbc unter Ubuntu 12.04 bereits erfolgreich hergestellt ? Ich würde mich sehr über Hilfe freuen.

Unten ist die Prozedur, die ich zum Konfigurieren von freetds und unixodbc verwendet habe . Danke im Vorraus für deine Hilfe!

Verfahren

Zuerst habe ich die folgenden Pakete mit installiert:

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

und konfigurierte freetds wie folgt:

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

Mit dem tsql- Tool kann ich durch Ausführen eine Verbindung zur Datenbank herstellen

tsql -S TS -U username -P password

Da ich eine odbc- Verbindung benötige, habe ich die Datei odbcinst.ini folgendermaßen konfiguriert :

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

und odbc.ini wie folgt:

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

Der Versuch, mit einem solchen Konfigurationsprogramm eine Verbindung zur Datenbank herzustellen , führt zu folgendem Fehler:

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
Dejan
quelle
Zur Verwendung tsql:sudo apt-get install freetds-bin
Stevie G

Antworten:

17

Vielen Dank, Ihr Beitrag war sehr nützlich für mich. Ich konnte es zum Laufen bringen, indem ich die folgenden Zeilen aus meiner Datei odbcinst.ini entfernte

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

So, jetzt sieht meine odbcinst.ini-Datei so aus:

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

und meine odbc.ini-Datei sieht jetzt so aus:

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

Nachdem ich alles vereinfacht hatte, funktionierte es großartig. Ich kann es immer noch nicht mit RODBC zum Laufen bringen, aber es hat mit isql funktioniert.

Ich weiß nicht, ob das helfen wird, aber Ihr Beitrag hat mir geholfen. Vielen Dank.

John Cutsinger
quelle
Vielen Dank, auf jeden Fall im Zusammenhang mit fehlenden Treiber in/etc/odbcinst.ini
Dejan
1
Hey tolle Antwort, aber leider konnte ich es nicht zum Laufen bringen, obwohl ich deine Dateien kopiert habe. irgendwelche Gedanken über den Grund warum? es ist so ziemlich dasselbe, außer dass ich auf dem SERVER-Teil eine IP und keinen Namen verwende. denkst du das könnte es sein?
Pedro Braz
14

Dies ist ein minimales, aber vollständiges Beispiel für das Herstellen einer Verbindung zur Azure SQL-Datenbank mit isqlUbuntu 14.04.1 LTS. Das Beispiel stammt aus " Herstellen einer Verbindung mit einer Azure SQL-Datenbank unter Ubuntu" (Haftungsausschluss: Es ist mein persönliches Wiki).

Installieren Sie die erforderlichen Pakete

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

FreeTDS konfigurieren

Datei /etc/freetds/freetds.conf

[global]
tds version = 7.1

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

Testverbindung

An dieser Stelle sollte das Verbinden mit tsqlfunktionieren:

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

Beachten Sie, dass @<HOST>erforderlich ist. Ansonsten endet die Verbindung mit einem Fehler:

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

Konfigurieren Sie den ODBC-Treiber

Datei /etc/odbcinst.ini

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

Konfigurieren Sie ODBC-Datenquellen

Datei /etc/odbc.ini

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

<SERVERNAME>ist das gleiche wie in freetds.conf.

Verbinde dich mit 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>

Beachten Sie, dass @<HOST>erforderlich ist. Ansonsten endet die Verbindung mit einem Fehler:

[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
user272735
quelle
Das @<HOST>scheint nicht mehr erforderlich zu sein.
Adrian Keister
7

In meinem Fall ist das Problem auf einfache Einrückungen in meiner Konfigurationsdatei zurückzuführen. Also habe /etc/odbc.iniich alle Einrückungen und Voila entfernt!

( odbcinst.iniBenimmt sich wie ein normales Kind und scheint keine Wutanfälle zu verursachen.)

Sudhanshu
quelle
DANKE DIR! Ich habe gestarrt, dass diese Konfiguration für 2 Stunden versucht, herauszufinden, dass Leerraum das Problem war.
Alex Barker
3

Ubuntu vor 12.04 hatte einen anderen Pfad in der Datei /etc/odbcinst.ini.

Der alte Fahrerweg war:

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

Ich habe es geändert in:

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

Hier ist die vollständige Konfiguration:

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

Funktioniert jetzt wie ein Zauber! Vielen Dank!

MikeH
quelle
Ist die Setup-Zeile jetzt veraltet?
Adrian Keister