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

Я пытаюсь подключиться к базе данных 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? Буду очень признателен за помощь.

Ниже приведена процедура, которую я использовал для настройки freetds и unixodbc . Заранее благодарю за помощь!

Процедура

Сначала я установил следующие пакеты с:

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

и настроил freetds следующим образом :

--- /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 I настроил 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
28
задан 16.04.2020, 16:57

4 ответа

В моем случае проблема возникла из-за простых отступов в моем конфигурационном файле. Таким образом, в /etc/odbc.ini я удалил все отступы и вуаля!

(odbcinst.ini ведет себя как нормальный ребенок и, кажется, не бросает истерики.)

7
ответ дан 16.04.2020, 16:58
  • 1
    Спасибо! Я смотрел, что эта конфигурация в течение 2 часов, пытаясь выяснить, что пробел был проблемой. – Ignacio Vazquez-Abrams 16.04.2020, 16:58

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

Работает как шарм сейчас! Спасибо!

3
ответ дан 16.04.2020, 16:58
  • 1
    Строка установки удерживается от использования, теперь? – tzot 16.04.2020, 16:59

Спасибо, ваш пост был очень полезен для меня. Я смог заставить его работать, удалив следующие строки из моего файла 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.

Не знаю, поможет ли это, но твой пост помог мне. Благодаря.

17
ответ дан 16.04.2020, 16:59
  • 1
    Эй большой ответ, но к сожалению я wasn' t способный заставить его работать, даже при том, что копирование Ваших файлов. какие-либо мысли о причине, почему? это - в значительной степени то же, за исключением того, что на СЕРВЕРЕ первая часть использует IP не имя. Вы думаете, что это могло быть им? большое спасибо – Erick Robertson 16.04.2020, 16:59
  • 2
    Спасибо, определенно связанное с недостающим драйвером в /etc/odbcinst.ini – Erick Robertson 16.04.2020, 17:00

Это минимальный, но полный пример того, как подключиться к Базе данных SQL Azure с помощью isql из Ubuntu 14.04.1 LTS. Пример взят из Как подключиться к базе данных SQL Azure из 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
14
ответ дан 16.04.2020, 17:00
  • 1
    @<HOST> больше, кажется, не требуется. – Bhargav Rao 16.04.2020, 17:00

Теги

Похожие вопросы