isql работает, но не tsql
Я не очень хорошо разбираюсь в Linux, но я могу разобраться. Моя конечная цель - заставить RODBC работать в блестящем приложении для подключения к базе данных Oracle 11.1g. Моим первым шагом была настройка клиента Oracle на виртуальной машине Ubuntu.
Детали версии Ubuntu:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
Я следовал инструкциям на:
https://help.ubuntu.com/community/Oracle%20Instant%20Client
Установить клиент. Я также включил пакет odbc. Мне удалось заставить sqlplus подключаться к базе данных довольно легко, но RODBC в блестящем по-прежнему не работал. Когда я попытался использовать isql в окне терминала, это не удалось. Чтобы преодолеть это, я установил freeTDS.
sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc
Я настроил следующие файлы как так.
--- /etc/odbcinst.ini ---
[Oracle]
Description = Oracle ODBC Connection
Driver = /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1
--- /etc/odbc.ini ---
[STODS1]
Driver = Oracle
ServerName = STODS1
Port = 1521
Database = STODS1
TDS_Version = 7.1
--- /etc/freetds/freetds.conf ---
[global]
tds version = 7.1
[STODS1]
host = stods1.xxxx.xxxxxxx.com
port = 1521
tds version = 7.1
с этой конфигурацией я получаю следующий ответ от разных команд
isql STODS1 USER PASSWORD -v
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Как видно, isql прекрасно работает
Однако osql не работает.
sudo osql -S "STODS1" -U USER -P PASSWORD
checking shared odbc libraries linked to isql for default directories...
strings: '': No such file
trying /tmp/sql ... no
trying /tmp/sql ... no
trying /etc ... OK
checking odbc.ini files
reading /home/oper/.odbc.ini
[STODS1] not found in /home/oper/.odbc.ini
reading /etc/odbc.ini
[STODS1] found in /etc/odbc.ini
found this section:
[STODS1]
Driver = Oracle
ServerName = STODS1
Port = 1521
Database = STODS1
TDS_Version = 7.1
looking for driver for DSN [STODS1] in /etc/odbc.ini
found driver line: " Driver = Oracle"
driver "Oracle" found for [STODS1] in odbc.ini
found driver named "Oracle"
"Oracle" is not an executable file
looking for entry named [Oracle] in /etc/odbcinst.ini
found driver line: " Driver = /usr/lib/oracle/12.1/client64
/lib/libsqora.so.12.1"
found driver /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1 for
[Oracle] in odbcinst.ini
/usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1 is an executable file
Using ODBC-Combined strategy
DSN [STODS1] has servername "STODS1" (from /etc/odbc.ini)
cannot read "/home/oper/.freetds.conf"
/etc/freetds/freetds.conf is a readable file
looking for [STODS1] in /etc/freetds/freetds.conf
found this section:
[STODS1]
host = stods1.xxxx.xxxxxx.com
port = 1521
tds version = 7.1
Configuration looks OK. Connection details:
DSN: STODS1
odbc.ini: /etc/odbc.ini
Driver: /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1
Server hostname: stods1.xxxx.xxxxxx.com
Address: 10.17.16.44
Attempting connection as ESG_REPORT ...
+ isql STODS1 ESG_REPORT ESG_REPORT1 -v
[08004][unixODBC][Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the
connect identifier specified
[ISQL]ERROR: Could not SQLConnect
sed: can't read /tmp/osql.dump.25185: No such file or directory
Я не понимаю, почему osql дает сбой и isql работает так, как будто osql использует isql в последних двух строках.
tsql также дает сбой, и, просматривая сеть и руководства, похоже, что это связано с версией TDS, но я попробовал все известные мне версии TDS как в файлах конфигурации, так и принудительно, используя TDSVER.
tsql -S STODS1 -U USER -P PASWORD
locale is "en_GB.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "Operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Я думаю, что я включил большую часть информации, но если есть что-то еще, что вам нужно, пожалуйста, просто дайте мне знать. Я работаю над этим уже 5 дней, так что немного сыт по горло. Любая помощь будет отличной.
Спасибо
1 ответ
Я не понимаю, почему вы используете freetds.conf
, Обычно он используется для доступа к базам данных Sybase и Microsoft MS SQL (см. Их домашнюю страницу). Я бы подавил (или хотя бы переименовал) freetds.conf
файл и положить все в odbc.ini
файл вроде этого (я позволю вам решить, лучше ли код пользователя / пароль лучше кодировать в INI-файле или где-либо еще):
--- /etc/odbc.ini ---
[STODS1]
Driver = Oracle
Server = stods1.xxxx.xxxxxxx.com
Port = 1521
Database = STODS1
USER = youroracleusername
PASSWORD = youroracleuserpassword