SQLPlus:加载共享库 libsqlplus.so 失败:无法打开共享对象文件:没有那个文件或目录

33
请为解决这个问题提供一个解决方案?在给出命令时:
sqlplus /nolog

发生的错误:

 sqlplus: error while loading shared libraries:
 libsqlplus.so: cannot open shared object file: No such file or directory

你是如何获取你的环境变量的?展示给我们看看。 - tvCa
16个回答

35

正确运行sqlplus的最小配置是设置ORACLE_HOMELD_LIBRARY_PATH。为方便使用,您可能还想相应地设置PATH

假设您已将所需的归档文件解压缩到了/opt/oracle/instantclient_11_1中:

$ export ORACLE_HOME=/opt/oracle/instantclient_11_1
$ export LD_LIBRARY_PATH="$ORACLE_HOME"
$ export PATH="$ORACLE_HOME:$PATH"

$ sqlplus

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Dec 31 14:06:06 2014
...

2
是的,但只有当可执行文件和库都在$ORACLE_HOME/中而不是安装在它们自己的目录中,如$ORACLE_HOME/bin/和$ORACLE_HOME/lib/。 - user123664
1
@ik_zelf 是的。但出于某些原因,我假设 OP 正在使用作为 instantclient 软件包 一部分提供的 SQL*Plus。这些都是主要目录中包含所有库和二进制文件的_平面_归档文件。当然,如果按照此处所述提取文件后将它们移动,您必须相应地调整各种环境变量。 - Sylvain Leroux
1
使用Instant Client时,不需要设置ORACLE_HOME。最好的做法是使用最新版本的Instant Client,并遵循Oracle安装说明 - Christopher Jones

20

1
即使您从RPM安装,仍然需要这个小魔法酱,才能让sqlplus工作(当然要校正为正确版本的Oracle客户端)。像许多其他页面建议的那样设置LD_LIBRARY_PATH环境变量是不起作用的。很遗憾它需要被连接到系统中,因为它将其从“下载客户端并运行”变成了“获取系统管理员的帮助来安装”。 - Andrew Beals
4
当前版本为18.3,以下这段脚本可解决sudo权限限制: echo /usr/lib/oracle/18.3/client64/lib > /tmp/oracle-instantclient.conf ; sudo cp /tmp/oracle-instantclient.conf /etc/ld.so.conf.d ; sudo ldconfig - Andrew Beals
2
在19c中,当RPM安装时,ldconfig命令会自动运行。 - Christopher Jones

14

我通过设置解决了这个错误

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME

是的,不仅是 $ORACLE_HOME/lib,而且还包括 $ORACLE_HOME。


你应该将它放在.bash_profile文件中,这样下次就不必再输入这个命令了。 - soulivong

9

您应该已经在/etc/profile.d/oracle.sh中拥有所有必要的变量。确保您使用以下命令进行源代码:

$ source /etc/profile.d/oracle.sh

该文件的内容如下:

ORACLE_HOME=/usr/lib/oracle/11.2/client64
PATH=$ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_HOME
export LD_LIBRARY_PATH
export PATH

如果你没有它,请创建并获取来源。

4

我知道这是一个旧的线程,但我再次遇到了Oracle 12c和LD_LIBRARY_PATH已经被正确设置的问题。我使用strace查看它具体在寻找什么以及为什么失败:

 strace sqlplus /nolog

sqlplus试图从不同的目录加载此库,但有些在我的安装中不存在。然后它尝试了我已经在LD_LIBRARY_PATH中设置过的那个目录:

open("/oracle/product/12.1.0/db_1/lib/libsqlplus.so", O_RDONLY) = -1 EACCES (Permission denied)

因此,在我的情况下,该库的权限为740,由于我的用户不是所有者,也没有分配oracle组,我无法读取它。所以简单的chmod +r就解决了问题。


这帮助我找到了原因。安装程序真的太糟糕了。我不得不重新安装它,以便路径正确。 - Leon

4
在Ubuntu Server 20.04上,使用即时客户端版本19.10.0.0,我使用alien安装了rpm包。当我只使用-i选项时,我遇到了这个错误。但是,当我添加了-c选项后,就没有这个问题了。从alien的man页面中可以看到:

-c、--scripts
尝试转换设计为在安装和卸载软件包时运行的脚本。请谨慎使用此选项,因为这些脚本可能是针对不同于您自己的系统而设计的,并可能会导致问题。建议您手动检查这些脚本并检查它们的功能,然后再使用此选项。

所以,在19c中似乎需要像这样运行alien,才能设置正确的配置,或者在早期版本中设置环境变量的脚本才会生成。(感谢@Christopher Jones纠正我关于这个问题的错误)。
sudo alien -i -c BasicPackage.rpm
sudo alien -i -c SqlPlus.rpm

从技术角度来看,19c(及更高版本)的RPM会创建 /etc/ld.so.conf.d/oracle-instantclient.conf 并运行 ldconfig。没有环境变量。 - Christopher Jones

3

权限: 我想强调对“sqlplus”权限的重要性。

  1. For any "Other" UNIX user other than the Owner/Group to be able to run sqlplus and access an ORACLE database , read/execute permissions are required (rx) for these 4 directories :

    $ORACLE_HOME/bin , $ORACLE_HOME/lib, $ORACLE_HOME/oracore, $ORACLE_HOME/sqlplus

  2. Environment. Set those properly:

    A. ORACLE_HOME (example: ORACLE_HOME=/u01/app/oranpgm/product/12.1.0/PRMNRDEV/)

    B. LD_LIBRARY_PATH (example: ORACLE_HOME=/u01/app/oranpgm/product/12.1.0/PRMNRDEV/lib)

    C. ORACLE_SID

    D. PATH

     export PATH="$ORACLE_HOME/bin:$PATH"
    

2

您可以尝试使用:

# echo "/usr/lib/oracle/12.2/client64/lib" > /etc/ld.so.conf.d/oracle.conf
# ldconfig

这个问题是因为Oracle Instant Client没有配置共享库所导致的。

1
不要忘记。
apt-get install libaio1 libaio-dev

或者

yum install libaio

1
在Oracle自己的Linux上(版本7.7,在/etc/os-release中PRETTY_NAME="Oracle Linux Server 7.7"),如果您使用了18.3客户端库进行安装。
sudo yum install oracle-instantclient18.3-basic.x86_64
sudo yum install oracle-instantclient18.3-sqlplus.x86_64

然后您需要将以下内容放入您的.bash_profile中:

export ORACLE_HOME=/usr/lib/oracle/18.3/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME

为了能够调用 SQLPlus 客户端,在该平台上它被称为 sqlplus64

1
使用19c即时客户端RPM要容易得多,它可以为您执行等效配置,而无需设置环境变量。此外,使用即时客户端时不应设置ORACLE_HOME。一般建议尽可能使用ldconfig而不是LD_LIBRARY_PATH - 请检查即时客户端安装说明。 - Christopher Jones
@ChristopherJones 谢谢您的提示。我安装了18.3客户端,因为在上述系统上运行 yum search instantclient 时只有它出现了(顺便说一下,这是Oracle Cloud中的“Always Free VM”)。我想19c即时客户端RPM必须单独下载或者必须将其他库添加到 yum 中--我还没有时间去探索这个选项。但我有些惊讶的是,在安装软件包之后需要如此多的后置配置... - András Aszódi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接