Menghubungkan MS SQL menggunakan freetds dan unixodbc: isql - tidak ada driver default yang ditentukan


28

Saya mencoba untuk terhubung ke database MS SQL menggunakan freetds dan unixodbc . Saya telah membaca berbagai panduan bagaimana melakukannya, tetapi tidak ada yang berfungsi dengan baik untuk saya. Ketika saya mencoba untuk terhubung ke database menggunakan alat isql , saya mendapatkan kesalahan berikut:

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

Adakah yang sudah berhasil membuat koneksi ke database MS SQL menggunakan freetds dan unixodbc di Ubuntu 12.04? Saya akan sangat menghargai bantuan.

Di bawah ini adalah prosedur yang saya gunakan untuk mengkonfigurasi freetds dan unixodbc . Terima kasih atas bantuan Anda sebelumnya!

Prosedur

Pertama, saya telah menginstal paket-paket berikut dengan:

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

dan mengkonfigurasi freetds sebagai berikut:

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

Menggunakan alat tsql saya bisa berhasil terhubung ke database dengan mengeksekusi

tsql -S TS -U username -P password

Karena saya memerlukan koneksi odbc, saya mengkonfigurasi odbcinst.ini sebagai berikut:

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

dan odbc.ini sebagai berikut:

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

Mencoba terhubung ke database menggunakan alat isql dengan konfigurasi seperti itu menghasilkan kesalahan berikut:

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

Untuk menggunakan tsql:sudo apt-get install freetds-bin
Stevie G

Jawaban:


17

Terima kasih, kiriman Anda sangat berguna bagi saya. Saya bisa membuatnya bekerja dengan menghilangkan baris berikut dari file odbcinst.ini saya

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

jadi sekarang file odbcinst.ini saya terlihat seperti ini:

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

dan file odbc.ini saya terlihat seperti ini sekarang:

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

Setelah saya menyederhanakan semuanya, itu bekerja dengan baik. Saya masih tidak bisa membuatnya bekerja dengan RODBC tetapi bekerja dengan isql.

Saya tidak tahu apakah ini akan membantu tetapi posting Anda membantu saya. Terima kasih.


Terima kasih, pasti terkait dengan driver yang hilang di/etc/odbcinst.ini
Dejan

1
Hai jawaban yang bagus tapi sayangnya saya tidak dapat membuatnya berfungsi, meskipun menyalin file Anda. ada pemikiran dengan alasan mengapa? itu hampir sama, kecuali bahwa pada bagian SERVER saya menggunakan IP bukan nama. apakah Anda pikir itu bisa terjadi? terima kasih banyak
Pedro Braz

14

Ini adalah contoh minimal tapi lengkap bagaimana menghubungkan ke Azure SQL Database dengan isqldari Ubuntu 14.04.1 LTS. Contoh diekstraksi dari Bagaimana Menghubungkan Database SQL Azure Dari Ubuntu (disclaimer: ini wiki pribadi saya).

Instal paket yang diperlukan

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

Konfigurasikan FreeTDS

Mengajukan /etc/freetds/freetds.conf

[global]
tds version = 7.1

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

Tes koneksi

Pada titik ini, koneksi dengan tsqlharus berfungsi:

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

Perlu diperhatikan @<HOST>. Kalau tidak, koneksi berakhir dengan kesalahan:

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

Konfigurasikan driver ODBC

Mengajukan /etc/odbcinst.ini

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

Konfigurasikan sumber data ODBC

Mengajukan /etc/odbc.ini

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

<SERVERNAME>sama dengan di freetds.conf.

Terhubung dengan 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>

Perlu diperhatikan @<HOST>. Kalau tidak, koneksi berakhir dengan kesalahan:

[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

The @<HOST>muncul tidak lagi diperlukan.
Adrian Keister

7

Dalam kasus saya, masalahnya muncul karena indentasi sederhana dalam file konfigurasi saya. Jadi /etc/odbc.ini, saya menghapus semua indentasi dan voila!

( odbcinst.iniberperilaku seperti anak normal dan sepertinya tidak membuat ulah.)


TERIMA KASIH! Saya telah menatap bahwa konfigurasi ini selama 2 jam mencoba untuk mencari tahu bahwa ruang putih adalah masalahnya.
Alex Barker

3

Ubuntu sebelum 12.04 memiliki jalur odbc yang berbeda di file /etc/odbcinst.ini.

Jalur pengemudi lama adalah:

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

Saya mengubahnya menjadi:

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

Ini konfigurasi lengkapnya:

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

Bekerja seperti jimat sekarang! Terima kasih!


Apakah garis pengaturan sudah usang, sekarang?
Adrian Keister
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.