[01000] [unixODBC] [Менеджер драйверов] Не удается открыть lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so': файл не найден
Я пытаюсь получить доступ к оракулу с сервера linux. Я использую unixODBC.
Когда я пытаюсь подключиться к oracle с помощью isql, и я получаю ошибку, которую менеджер драйверов не может открыть libsqora.so.12.1.
odbc.ini
[NAME]
Application Attributes = T
Attributes = W
BatchAutocommitMode = IfAllSuccessful
BindAsFLOAT = F
CloseCursor = F
DisableDPM = F
DisableMTS = T
Driver = Oracle 11g ODBC driver
DSN = DSN_NAME
EXECSchemaOpt =
EXECSyntax = T
Failover = T
FailoverDelay = 10
FailoverRetryCount = 10
FetchBufferSize = 64000
ForceWCHAR = F
Lobs = T
Longs = T
MaxLargeData = 0
MetadataIdDefault = F
QueryTimeout = T
ResultSets = T
ServerName = ServerName
SQLGetData extensions = F
Translation DLL =
Translation Option = 0
DisableRULEHint = T
UserID = xxxx
Password=<password>
StatementCache=F
CacheBufferSize=20
UseOCIDescribeAny=F
odbcinst.ini
[Oracle 11g ODBC driver]
Description=Oracle ODBC driver for Oracle 11g
Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so
FileUsage=1
Затем, когда я использую isql для доступа к oracle, я получаю следующую ошибку:
[[email protected] lib]# isql -v NAME
[01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so' : file not found
[ISQL]ERROR: Could not SQLConnect
У меня была опечатка в odbcinst.ini. Я исправил, но все равно такую же ошибку.
[[email protected] tmp]# isql -v NAME
[01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1' : file not found
[ISQL]ERROR: Could not SQLConnect
[[email protected] tmp]# ls -l /usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1
-rw-r--r-- 1 bin bin 996363 Sep 5 2010 /usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1
[Oracle 11g ODBC driver]
Description=Oracle ODBC driver for Oracle 11g
Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1
FileUsage=1
ENV
[[email protected] tmp]# env
HOSTNAME=xxxxx
SSH2_TTY=/dev/pts/0
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
ODBC_DIR=/usr/local/easysoft/unixODBC
OLDPWD=/usr/local/easysoft
SSH_SESSION_ID=1424
SSH_TTY=/dev/pts/0
LD_LIBRARY_PATH=/usr/local/easysoft/lib:/usr/local/easysoft/unixODBC/lib
A__z="*SHLVL
TNS_ADMIN=/usr/local/easysoft/oracle/InstantClient112/network/
INPUTRC=/etc/inputrc
PWD=/tmp
LANG=en_US.UTF-8
ODBCSYSINI=/etc/
HOME=/root
SHLVL=3
ODBCINI=/etc
LESSOPEN=|/usr/bin/lesspipe.sh %s
ORACLE_HOME=/usr/local/easysoft/oracle/InstantClient112/
G_BROKEN_FILENAMES=1
_=/bin/env
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/local/easysoft/unixODBC/bin:/opt/oraClient/11.2.0.4/bin
Исправлена оригинальная проблема с обновлениями LD_LIBRARY_PATH, но теперь она снова ломается, так как я пытаюсь использовать 32-битный клиент Oracle.
Установленный 32-битный клиент oracle в каталоге /opt/oraClient/11.2.0.4_32/.
Изменено значение odbcinst.ini:
[Oracle 11g ODBC driver]
Description=Oracle ODBC driver for Oracle 11g
#Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1
Driver=/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1
FileUsage=1
Ошибка:
[[email protected] lib]# /usr/local/bin/isql -v NAME
[01000][unixODBC] [Driver Manager]Can't open lib '/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1' : file not found
[ISQL]ERROR: Could not SQLConnect
Если мне нужно использовать 32-битный клиент Oracle, что я делаю неправильно... Я знаю, что это что-то в переменных окружающей среды.
[[email protected] lib]# file /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1
/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped
Я включаю трассировку, но не могу прикрепить документ здесь. Я могу отправить по электронной почте.
Дополнительная информация об отладке:
[[email protected] bin]# ldd /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1
ldd: warning: you do not have execution permission for '/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1'
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/libdl.so.2 (0xf7f2b000)
libm.so.6 => /lib/libm.so.6 (0xf7f02000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf7ee8000)
libnsl.so.1 => /lib/libnsl.so.1 (0xf7ecf000)
libclntsh.so.11.1 => not found
libodbcinst.so.1 => not found
libc.so.6 => /lib/libc.so.6 (0xf7d71000)
/lib/ld-linux.so.2 (0x00134000)
Я не получаю один "не найден", который может вызвать некоторые проблемы:
[[email protected] bin]# ls /opt/oraClient/11.2.0.4_32/lib/libclntsh.so.11.1
/opt/oraClient/11.2.0.4_32/lib/libclntsh.so.11.1
Ниже приведена последняя версия env:
[[email protected]]# env
HOSTNAME=xxxxx
SSH2_TTY=/dev/pts/0
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
ODBC_DIR=/usr/local/easysoft/unixODBC
SSH_TTY=/dev/pts/0
LD_LIBRARY_PATH=/opt/oraClient/11.2.0.4_32/:/opt/oraClient/11.2.0.4_32/lib/:/usr/local/easysoft/oracle/InstantClient112:/usr/local/easysoft/oracle/InstantClient112/lib/
TNS_ADMIN=/opt/oraClient/11.2.0.4_32/network/
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/local/easysoft/unixODBC/bin:/opt/oraClient/11.2.0.4_32/bin
INPUTRC=/etc/inputrc
LANG=en_US.UTF-8
ODBCSYSINI=/etc/
SHLVL=4
HOME=/root
ODBCINI=/etc
ORACLE_HOME=/opt/oraClient/11.2.0.4_32/
G_BROKEN_FILENAMES=1
_=/bin/env
Ответы
Ответ 1
Эта ошибка вводит в заблуждение:
The file that the error claimed was not present did exist.
Я смог преследовать фактический недостающий файл, выполнив:
# ldd /path/to/your/socalled/missing/file.so
Это возвратило ряд файлов, и один сказал:
libodbcinst.so.2 => not found
Это было для меня виновником. Затем я создал ссылку, в которой я нуждался, и вуаля, ошибка исчезла.
ref: http://mailman.unixodbc.org/pipermail/unixodbc-support/2011-November/003018.html
Ответ 2
Мгновенный клиент не имеет каталога lib
. Если вы скачали пакет instantclient-odbc-linux
и распаковали его в том же месте, что и базовый пакет, файл libsqora.so.11.1
будет durectly под /usr/local/easysoft/oracle/InstantClient112
.
Поэтому ваш.ini должен указывать на:
Driver=/usr/local/easysoft/oracle/InstantClient112/libsqora.so.11.1
Обратите внимание на расширение; вы можете захотеть софт-ссылку на libsqora.so
. Если вы переместили файлы .so
в подкаталог после распаковки (?), Вам понадобится:
Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1
Похоже, вы разобрали файлы мгновенных клиентов после распаковки, создав каталог lib
. Я не уверен, что это вызовет проблемы. Но вы также не установили LD_LIBRARY_PATH
, как показывают инструкции по установке:
Шаги установки:
-
Загрузите соответствующие пакеты Instant Client для своей платформы. Все установки ТРЕБУЮТ базовый пакет.
-
Разархивируйте пакеты в один каталог, например "instantclient".
-
Задайте путь загрузки библиотеки в вашей среде в каталог на шаге 2 ("instantclient"). На многих платформах UNIX LD_LIBRARY_PATH является подходящей переменной окружения. В Windows необходимо использовать PATH.
-
Запустите приложение и наслаждайтесь.
Очевидно, что шаг (4) пока не работает для вас, но я думаю, что потому, что вы не сделали шаг (3); и я думаю, поскольку вы разделили файлы, что само по себе может вызвать проблему, вам может потребоваться включить оба параметра .../InstantClient112
и .../InstantClient112/lib
в LD_LIBRARY_PATH
. И убедитесь, что измененное значение экспортировано. Я не уверен, почему вы хотите изменить порядок файлов.
Ответ 3
sudo apt-get install libaio1 libaio-dev