Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 
like image 694
user3521305 Avatar asked Apr 10 '14 21:04

user3521305


Video Answer


2 Answers

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

like image 75
user3771500 Avatar answered Sep 18 '22 11:09

user3771500


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.

like image 42
Alex Poole Avatar answered Sep 19 '22 11:09

Alex Poole