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 в shiny все еще не работал. Когда я попытался использовать 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 дней, поэтому уже немного устал. Любая помощь была бы очень кстати.

Thanks

0
задан 13 July 2016 в 18:33

1 ответ

Я не понимаю, почему Вы используете freetds.conf. Это обычно используется для доступа к Sybase и Microsoft MS SQL databases (cfr их домашняя страница ). Я подавил бы (или по крайней мере переименовал бы), freetds.conf файл, и поместите все в odbc.ini файл как это (я позволяю ему Вам, чтобы решить, кодируется ли идентификатор пользователя/пароль лучше в ini файле или в другом месте):

--- /etc/odbc.ini ---
[STODS1]
Driver = Oracle
Server = stods1.xxxx.xxxxxxx.com
Port = 1521
Database = STODS1
USER = youroracleusername
PASSWORD = youroracleuserpassword
0
ответ дан 28 September 2019 в 23:35

Другие вопросы по тегам:

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