首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[01000][unixODBC][驱动程序管理器]无法打开库'/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so‘:找不到文件

[01000][unixODBC][驱动程序管理器]无法打开库'/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so‘:找不到文件
EN

Stack Overflow用户
提问于 2014-04-11 05:54:33
回答 3查看 68.5K关注 0票数 26

我正在尝试从linux服务器访问oracle。我正在使用unixODBC。

当我尝试使用isql访问oracle时,我得到了驱动程序管理器无法打开libsqora.so.12.1的错误。

odbc.ini

代码语言:javascript
复制
[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

代码语言:javascript
复制
 [Oracle 11g ODBC driver]
 Description=Oracle ODBC driver for Oracle 11g
 Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so
 FileUsage=1

然后,当我使用isql访问oracle时,我得到以下错误:

代码语言:javascript
复制
 [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

我在odbcinst.ini中有打字错误。我已经纠正了,但仍然是同样的错误。

代码语言:javascript
复制
 [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

环境

代码语言:javascript
复制
 [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

修复了LD_LIBRARY_PATH更新的原始问题,但现在它再次中断,因为我正在尝试使用32位Oracle客户端。

在目录/opt/oraClient/11.2.0.4_32/中安装了32位oracle客户端。

修改odbcinst.ini:

代码语言:javascript
复制
[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

错误:

代码语言:javascript
复制
[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

如果我需要使用32位Oracle客户端,我做错了什么……我知道这是环境变量中的一些问题。

代码语言:javascript
复制
 [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

我启用了跟踪,但无法在此处附加文档。我可以发邮件。

更多调试信息:

代码语言:javascript
复制
 [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)

我没有得到一个“找不到”,这可能会导致一些问题:

代码语言:javascript
复制
 [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

以下是最新的env输出:

代码语言:javascript
复制
 [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
EN

回答 3

Stack Overflow用户

发布于 2014-06-24 21:43:17

此错误具有误导性:

代码语言:javascript
复制
The file that the error claimed was not present did exist.

我能够通过执行以下命令来查找实际丢失的文件:

代码语言:javascript
复制
# ldd /path/to/your/socalled/missing/file.so

这将返回一系列文件,其中一个表示:

代码语言:javascript
复制
libodbcinst.so.2 => not found

这就是我的罪魁祸首。然后我创建了我需要的链接,瞧,错误消失了。

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

票数 43
EN

Stack Overflow用户

发布于 2014-04-11 07:02:09

Instant client没有lib目录。如果您已经下载了instantclient-odbc-linux package并将其解压缩到与基本包相同的位置,那么libsqora.so.11.1文件将直接位于/usr/local/easysoft/oracle/InstantClient112下。

所以你的.ini应该指向:

代码语言:javascript
复制
Driver=/usr/local/easysoft/oracle/InstantClient112/libsqora.so.11.1

不过,请注意扩展名;您可能希望将其软链接到libsqora.so。如果您在解压(?)后将.so文件移动到子目录中那么你需要:

代码语言:javascript
复制
Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1

看起来你已经在解压后重新生成了即时客户端文件,创建了一个lib目录。我不确定这是否会直接给你带来问题。但是您也没有像installation instructions建议的那样设置LD_LIBRARY_PATH

安装步骤:

  1. 为您的平台下载适当的即时客户端软件包。所有安装都需要基本包。
  2. 将软件包解压缩到一个单独的目录中,如"instantclient“。
  3. 将您环境中的库加载路径设置为步骤2中的目录("instantclient")。在许多UNIX平台上,LD_LIBRARY_PATH是合适的环境变量。在Windows上,应使用路径。
  4. 启动您的应用程序并尽情享受。

显然,第(4)步还不适合您,但我认为这是因为您还没有完成第(3)步;而且我认为,由于您已经拆分了文件--这本身可能会导致问题--您可能需要在LD_LIBRARY_PATH变量中同时包含.../InstantClient112.../InstantClient112/lib。并确保导出修改后的值。我不知道你为什么要重新排列这些文件。

票数 3
EN

Stack Overflow用户

发布于 2016-05-25 06:34:57

sudo apt-get install libaio1 libaio-dev

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22999798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档