Linux [01000][unixODBC][Driver Manager]无法打开lib'/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so':找不到文件

Linux [01000][unixODBC][Driver Manager]无法打开lib'/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so':找不到文件,linux,oracle,unixodbc,oracleclient,Linux,Oracle,Unixodbc,Oracleclient,我正在尝试从linux服务器访问oracle。我正在使用unixODBC 当我尝试使用isql访问oracle时,我得到一个错误,即驱动程序管理器无法打开libsqora.so.12.1 odbc.ini [NAME] Application Attributes = T Attributes = W BatchAutocommitMode = IfAllSuccessful BindAsFLOAT = F CloseCursor = F DisableDPM = F Disabl

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

当我尝试使用isql访问oracle时,我得到一个错误,即驱动程序管理器无法打开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
然后,当我使用isql访问oracle时,出现以下错误:

 [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中有输入错误。我已经改正了,但仍然是同样的错误

 [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
环境

修复了LD_LIBRARY_路径更新的原始问题,但由于我尝试使用32位Oracle客户端,现在它再次被破坏

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

修改了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
错误:

[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客户机,我做错了什么…我知道这是环境变量中的一些东西

 [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
我启用了跟踪,但无法在此附加文档。我可以发电子邮件

更多调试信息:

 [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)
我没有找到可能会导致某些问题的:

 [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
以下是最新的环境输出:

 [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

即时客户端没有lib目录。如果您已经下载并解压缩了与基本包相同的位置,那么libsqora.so.11.1文件将强制位于/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,如下所示:

安装步骤:

下载适合您平台的即时客户端软件包。所有安装都需要基本软件包

将包解压缩到单个目录中,如instantclient

将环境中的库加载路径设置为步骤2 instantclient中的目录。在许多UNIX平台上,LD_LIBRARY_路径 是适当的环境变量。在Windows上,路径应为 用过

启动您的应用程序并享受


很明显,第四步对你还不起作用,但我认为那是因为你还没有完成第三步;我认为,在分割文件时(这本身可能会导致问题),可能需要在LD_LIBRARY_PATH变量中同时包含…/InstantClient112和…/InstantClient112/lib。并确保导出修改后的值。我不确定您为什么要重新排列文件。

此错误具有误导性:

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:

sudo apt get install libaio 1 libaio dev

基本即时客户端没有该文件或lib目录。那么,它真的是路径所示的即时客户端,还是完整的客户端或服务器?修复了…仍然不工作。如果您重新排列了即时客户端文件,我不知道这是否会混淆内部链接-也许错误是另一个无法找到的错误?您可能还需要将lib目录和/或其父目录添加到LD_LIBRARY_路径,这有什么区别吗?我用您的反馈更新了LD_LIBRARY_路径,它成功了。我让isql正常工作,但发现我为其构建的应用程序只支持32位oracle客户端。因此,我安装了32位oracle并再次破坏了它。我现在在执行sql时遇到同样的错误。这是公司为unixODBC打包的构建,看起来它们包括oracle驱动程序和instantclient。但是我将驱动程序指向/opt/oraClient/11.2.0.4_32/下的32位oracle安装。请帮助……我已经尝试了对odbsinst.ini文件的所有更改。@user3521305-如果您现在得到的是ORA-01017,那不是驱动程序或环境问题。您正在成功联系数据库,但它是否正确取决于SMARTS_SDI_NA DSN指向的位置。这是错误的DB实例,或者odbc.ini中的用户名或密码对于该DSN是错误的。请记住,在11g中这些是区分大小写的。我想这三个密码中的一个肯定是错的,很可能是密码。检查您是否可以连接到其他客户端。我粘贴了错误的输出…ORA-01017用于使用64位oracle驱动程序的工作客户端…我可以让它工作。我的问题是当我尝试使用32位oracle驱动程序时。好的,那么该文件肯定存在-您得到了32位ODBC包-并且您将LD_LIBRARY_路径设置到了新位置?感谢您的提示,在Ubuntu上设置Linux i应用程序访问时,遇到了相同的丢失文件问题。如果该文件存在,但不在库路径中,您可以设置LD_LIBRARY_PATH或将文件添加到/etc/LD/conf.d和
重播ldconfig@user3771500你可以发布你创建的链接吗,我缺少这些文件:libicuuc.so.42和libicudata.so.42 ldd保存了我!我想知道你是如何创建链接的?在我这边,我有libclntsh.so.12.1=>未找到和libclntshcore.so.12.1=>未找到
# ldd /path/to/your/socalled/missing/file.so
libodbcinst.so.2 => not found