RAC srvctl 命令报 libpthread.so.0 cannot open shared object file No such file or directory 解决方法...

本文详细解析了在使用Oracle Cluster Registry Services (CRS)时遇到的srvctl命令报错问题,并提供了修正方法。通过修改PATH环境变量的顺序和正确处理LD_ASSUME_KERNEL参数,解决了无法加载共享库的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行srvctl命令报错:

[oracle@rac1 u01]$ srvctl remove asm -n rac1

/u01/app/oracle/product/10.2.0/db_1/jdk/jre/bin/java:error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory

开始还觉得奇怪,因为我在安装CRS的时候,已经修改了vipca和ORA_CRS_HOME下srvctl命令的中参数。即注释掉了LD_ASSUME_KERNEL参数。

但是运行的时候,还是报了这个错误,后来用which srvctl命令才发现了问题的所在:

[oracle@rac1 u01]$which srvctl

/u01/app/oracle/product/10.2.0/db_1/bin/srvctl

系统调用的是ORACLE_HOME下的srvctl。所以在修改LD_ASSUME_KERNEL命令时,别忘了修改ORACLE_HOME下的,如果变量是将ORACLE_HOME放在前面,那么就会调用ORACLE_HOME下的srvctl命令。

[oracle@rac2 bin]$ echo $PATH

.:.:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/NX/bin:/home/oracle/bin:/home/oracle/bin:/u01/app/oracle/product/10.2.0/db_1/bin:/u01/app/oracle/product/crs/bin:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin:/u01/app/oracle/common/oracle/bin:/home/oracle/bin:/home/oracle/bin:/u01/app/oracle/product/crs/bin:/u01/app/oracle/product/10.2.0/db_1/bin:/u01/app/oracle/product/crs/bin:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin:/u01/app/oracle/common/oracle/bin

环境变量中的设置:

[oracle@rac2 ~]$ vi ~/.bash_profile

...

export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin

...

修改一下环境变量中PATH的顺序:

export PATH=.:${PATH}:$HOME/bin:$ORA_CRS_HOME/bin:$ORACLE_HOME/bin

重新开了一个ssh窗口,因为在连接的时候才会加载profile文件,srvctl的位置变成了ORA_CRS_HOME下面的了。

[oracle@rac2 ~]$ which srvctl

/u01/app/oracle/product/crs/bin/srvctl

注释的方法有两种:

(1)使用unset

#Remove this workaround when the bug 3937317 is fixed

LD_ASSUME_KERNEL=2.4.19

export LD_ASSUME_KERNEL

unset LD_ASSUME_KERNEL

(2)直接注释掉:

#Remove this workaround when the bug 3937317 is fixed

#LD_ASSUME_KERNEL=2.4.19

#export LD_ASSUME_KERNEL

---------------------------------------------------------------------------------------------------

### 解决 Linux 下 Oracle 登录时遇到的 `libsqlplus.so` 共享库加载错误 当尝试在 Linux 上启动 SQL*Plus 或其他 Oracle 客户端工具并收到类似于 "error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory" 的错误消息时,这通常意味着环境变量设置不正确或共享库路径未被正确配置。 #### 设置 Oracle 环境变量 为了使 Oracle 能够找到所需的共享库文件,需要确保设置了正确的 `$ORACLE_HOME` 和 `$LD_LIBRARY_PATH` 变量。这些可以在用户的 shell 配置文件中定义,比如 `.bash_profile` 或者通过执行特定脚本来完成: ```sh export ORACLE_HOME=/u01/app/oracle/product/9.2.0 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/lib ``` 上述命令会将 `/u01/app/oracle/product/9.2.0/lib` 添加到动态链接器查找路径中[^1]。 #### 创建必要的目录结构与权限调整 如果缺少某些必需的目录,则应创建它们,并赋予适当的所有权和访问权限给相应的用户组。例如: ```sh su - root mkdir -p /u01/app/oracle/product/9.2.0 chown -R oracle.oinstall /u01 mkdir /var/opt/oracle chown oracle.dba /var/opt/oracle chmod 755 /var/opt/oracle ``` 此操作可以确保 Oracle 进程能够正常读取所需资源。 #### 执行根用户脚本 对于多节点 RAC(Real Application Clusters)安装,在所有节点上运行 `root.sh` 是非常重要的一步。该脚本负责配置集群件和其他依赖项,从而允许应用程序顺利工作。具体做法如下所示: ```sh [root@rac2 ~]# /oracle/app/grid/product/11.2.0/root.sh ``` 注意:如果有尚未处理的问题存在,可能还需要应用补丁来解决问题后再继续执行这个脚本[^3]。 #### 检查现有文件属性 确认目标机器上的 `libsqlplus.so` 文件确实存在于预期位置并且具有可执行权限是非常有帮助的。可以通过下面的方式验证这一点: ```sh ls -l $ORACLE_HOME/lib/libsqlplus.so ``` 理想情况下,输出应该显示类似 `-rwxr-x--x` 的模式,表明文件是可以被执行的[^2]。 #### 总结建议 为了避免未来再次发生此类问题,推荐定期审查系统的环境配置以及保持软件版本更新至最新稳定版。此外,遵循官方文档中的指导来进行任何更改总是最安全的做法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值