[01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so' : file not found

匿名 (未验证) 提交于 2019-12-03 03:04:01

问题:

I am trying to acces oracle from linux server. I am using unixODBC.

When i try to acces oracle using isql and i get error that driver manager can't open 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 

Then, when i use isql to acces oracle i get the following error:

 [root@xxxxx 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 

I had typo in odbcinst.ini. I have corrected but still same error.

 [root@xxxxx 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    [root@xxxxx 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

 [root@xxxxx 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 

Fixed original issue with LD_LIBRARY_PATH updates but now it is broken again since I am trying to use the 32bit Oracle client.

Installed 32bit oracle client in directory /opt/oraClient/11.2.0.4_32/.

Modified the 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 

Error:

[root@xxxxx 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 

If I need to use the 32bit Oracle client, what am i doing wrong...I know it is something in environmental variables.

 [root@xxxxx 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 

I enable trace but am not able to attach document here. I can email.

More debug info:

 [root@xxxxx 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) 

I don't get one the "not found" which may be causing some problems:

 [root@xxxxx 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 

Below is the most recent env output:

 [root@xxxxx]# 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:

This error is misleading:

The file that the error claimed was not present did exist. 

I was able to chase down the actual missing file by executing:

# ldd /path/to/your/socalled/missing/file.so 

This returned a series of files and one said:

libodbcinst.so.2 => not found 

That is was the culprit for me. I then created the link that I needed and voila, the error went away.

ref: http://mailman.unixodbc.org/pipermail/unixodbc-support/2011-November/003018.html



回答2:

Instant client doesn't have a lib directory. If you've downloaded the instantclient-odbc-linux package and unzipped that in the same location as the basic package then the libsqora.so.11.1 file will be durectly under /usr/local/easysoft/oracle/InstantClient112.

So your .ini should point to:

Driver=/usr/local/easysoft/oracle/InstantClient112/libsqora.so.11.1 

Note the extension though; you might want to soft-link that to libsqora.so. If you've moved the .so files into a subdirectory after unzipping (?) then you'd need:

Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1 

It looks like you've reoriganised the instant client files after unzipping, creating a lib directory. I'm not sure if that will directly cause you problems. But you also haven't set LD_LIBRARY_PATH, as the installation instructions suggest:

Installation Steps:

  1. Download the appropriate Instant Client packages for your platform. All installations REQUIRE the Basic package.

  2. Unzip the packages into a single directory such as "instantclient".

  3. Set the library loading path in your environment to the directory in Step 2 ("instantclient"). On many UNIX platforms, LD_LIBRARY_PATH is the appropriate environment variable. On Windows, PATH should be used.

  4. Start your application and enjoy.

Clearly step (4) isn't working for you yet, but I think that's because you haven't done step (3); and I think as you've split the files - which might itself cause an issue - you may need to include both .../InstantClient112 and .../InstantClient112/lib in the LD_LIBRARY_PATH variable. And make sure the modified value is exported. I'm not sure why you'd want to rearrange the files though.



回答3:

sudo apt-get install libaio1 libaio-dev



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!