Підключення MS SQL за допомогою freetds та unixodbc: isql - не вказаний драйвер за замовчуванням


28

Я намагаюся підключитися до бази даних MS SQL за допомогою freetds та unixodbc . Я читав різні посібники, як це зробити, але ніхто не працює добре для мене. Коли я намагаюся підключитися до бази даних за допомогою інструмента isql , я отримую таку помилку:

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

Хтось уже успішно встановив підключення до бази даних MS SQL за допомогою freetds та unixodbc на Ubuntu 12.04? Я дуже вдячний за допомогу.

Нижче наведено процедуру, яку я використовував для налаштування вільних та unixodbc . Заздалегідь дякуємо за вашу допомогу!

Порядок

По-перше, я встановив такі пакети з:

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

і налаштували ладочки наступним чином:

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

Використовуючи інструмент tsql , я можу успішно підключитися до бази даних шляхом виконання

tsql -S TS -U username -P password

Оскільки мені потрібне з'єднання odbc, я налаштував odbcinst.ini наступним чином:

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

і odbc.ini наступним чином:

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

Спроба підключитися до бази даних за допомогою інструмента isql з такою конфігурацією призводить до наступної помилки:

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

Для використання tsql:sudo apt-get install freetds-bin
Стіві Г

Відповіді:


17

Дякую, ваша публікація була дуже корисною для мене. Мені вдалося змусити його працювати, видаливши наступні рядки з мого файлу odbcinst.ini

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

тому тепер мій файл odbcinst.ini виглядає так:

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

і мій файл odbc.ini зараз виглядає так:

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

Одного разу я спростив усе, це спрацювало чудово. Я досі не можу змусити його працювати з RODBC, але він працював з isql.

Я не знаю, чи це допоможе, але ваш пост допоміг мені. Спасибі.


Дякую, безумовно, пов’язаний із зниклим водієм у/etc/odbcinst.ini
Деян

1
Ей чудова відповідь, але, на жаль, я не зміг змусити його працювати, навіть не дивлячись на копіювання файлів. якісь думки з причини, чому? це майже те саме, за винятком того, що в частині СЕРВЕР я використовую IP, а не ім'я. ти думаєш, що це могло бути? велике спасибі
Педро Браз

14

Це мінімальний, але повний приклад того, як підключитися до бази даних Azure SQL за isqlдопомогою Ubuntu 14.04.1 LTS. Приклад витягнутий із підключення бази даних Azure SQL від Ubuntu (відмова від відповідальності: це моя особиста вікі).

Встановіть необхідні пакети

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

Налаштування FreeTDS

Файл /etc/freetds/freetds.conf

[global]
tds version = 7.1

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

Тест з'єднання

У цей момент з'єднання з tsql:

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

Зверніть увагу, що @<HOST>потрібно. Інакше з'єднання закінчується помилкою:

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

Налаштуйте драйвер ODBC

Файл /etc/odbcinst.ini

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

Налаштування джерел даних ODBC

Файл /etc/odbc.ini

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

<SERVERNAME>те саме, що і в freetds.conf.

Підключіться до 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>

Зверніть увагу, що @<HOST>потрібно. Інакше з'єднання закінчується помилкою:

[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

Більше @<HOST>не видається потрібним.
Адріан Кейстер

7

У моєму випадку проблема виникла через прості відступи у моєму конфігураційному файлі. Отже /etc/odbc.ini, я видалив усі відступи та вуаля!

( odbcinst.iniповодиться як нормальна дитина і, здається, не кидає істерики.)


ДЯКУЮ ТОБІ! Я дивився, що ця конфігурація протягом двох годин намагається з'ясувати, що проблема в цьому пробілі.
Алекс Баркер

3

Ubuntu до 12.04 мав інший шлях odbc у файлі /etc/odbcinst.ini.

Старий шлях водія:

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

Я змінив його на:

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

Ось повна конфігурація:

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

Зараз працює як шарм! Спасибі!


Чи застаріла лінія налаштування зараз?
Адріан Кейстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.