错误 error while loading shared libraries: libclntsh.so.9.0 的解决

在新服务器上通过复制方式部署Oracle9i客户端时遇到libclntsh.so.9.0缺失的问题,经排查发现环境变量未生效,原因是oracle用户主目录设置错误。

上午一个同事在安装客户端后,出现了问题,错误提示信息如下:

 

 

[oracle@filesvr1 bin]$ ./sqlplus /nolog

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

 

 

具体情况如下:

 

业务服务器由于硬件原因,需要更换一台服务器,在新服务器上同样要安装Oracle 9i客户端。 由于新服务器和旧服务器的linux版本相同,所以考虑将老服务器上的Oracle客户端直接copy到新服务器上即可:

 

[oracle@filesvr1 oracle]$ scp -pr oracle@172.16.3.85:/opt/oracle/product ./

oracle@172.16.3.85's password:

root.sh                                                        100%   10    30.5KB/s   00:00   

areasQueries.jar                                                 100%   52KB   5.0MB/s   00:00   

generalQueries.jar                                               100%   72KB   8.0MB/s   00:00   

rgsQueries.jar                                                  100%   54KB   8.5MB/s   00:00   

globalVarQueries.jar                                             100% 6707     2.0MB/s   00:00   

SpawnQueries.jar                                                100%   10KB   3.5MB/s   00:00   

SidQueries.jar                                                  100%   57KB   7.6MB/s   00:00   

RunningProcessesQuery.jar                                        100%   52KB   8.5MB/s   00:00   

netQueries.jar                                                   100%   21KB   4.7MB/s   00:00

 

………

 

 

拷贝完成之后,设置环境变量:

[oracle@filesvr1 oracle]$ more .bash_profile

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

# User specific environment and startup programs

 

PATH=$PATH:$HOME/bin

export PATH

unset USERNAME

ORACLE_HOME=/opt/oracle/product/9.2.0

ORACLE_BASE=/opt/oracle

export ORACLE_HOME ORACLE_BASE

LD_LIBRARY_PATH=/opt/oracle/product/9.2.0/lib:/lib:/usr/lib:/usr/local/lib

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:/sbin:/usr/sbin

export PATH LD_LIBRARY_PATH NLS_LANG

admin=$ORACLE_BASE/admin/$ORACLE_SID/udump

export admin

 

  

测试客户端命令:

 

[oracle@filesvr1 bin]$ ./sqlplus /nolog

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

 

 

这就很奇怪了,既然环境变量设置正确,为什么还会提示找不到libclntsh.so.9.0文件呢?

 

$ORACLE_HOME/lib目录下查找,发现libclntsh.so.9.0文件存在,下面我们使用

ldd  命令查看sqlplus的依赖的共享库信息:

 

[oracle@filesvr1 oracle]$ ldd product/9.2.0/bin/sqlplus

        libclntsh.so.9.0 => not found

        libwtc9.so => not found

        libdl.so.2 => /lib/libdl.so.2 (0xb75d9000)

        libm.so.6 => /lib/tls/libm.so.6 (0xb75b7000)

        libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb75a6000)

        libnsl.so.1 => /lib/libnsl.so.1 (0xb7591000)

        libc.so.6 => /lib/tls/libc.so.6 (0xb7459000)

        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

 

发现,确实提示找不到libclntsh.so.9.0相关文件,看来是环境变量的设置没有生效,问题一时陷入困境。

 

冥思苦想,偶然间发现oracle用户的主目录不是/opt/oracle 我晕晕晕。。。

 

[oracle@filesvr1 oracle]$ pwd

/home/oracle

 

怪不得环境设置不生效呢,原来SA在安装系统之后建立oracle帐户时,将oracle的用户目录建成了/home/oracle,将oracle用户删掉重建,然后重新拷贝oracle客户端文件、设置环境变量即可。

 

经验教训: 虽然公司的oracle安装规范是将oracle用户的主目录建在/opt/oracle 但是SA也许并不知道这一点,尤其是一个新的SA , SA不可靠哦 ^_^  

 

看来Oracle用户建立和相关设置最好还是DBA来完成吧。

 

--The End--

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7220098/viewspace-196158/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7220098/viewspace-196158/

### 解决 error while loading shared libraries: libclntsh.so.19.1 的错误 当遇到“error while loading shared libraries: libclntsh.so.19.1”错误时,这通常表明系统在运行程序时无法找到或正确加载所需的共享库文件。以下是详细的解决方法: #### 1. 确认共享库是否存在 检查`libclntsh.so.19.1`是否存在于系统的库路径中。可以使用以下命令查找: ```bash find / -name "libclntsh.so.19.1" 2>/dev/null ``` 如果未找到该文件,则需要安装对应的Oracle客户端库[^2]。 #### 2. 设置动态链接器搜索路径 如果共享库文件存在但系统无法找到它,可以通过设置环境变量`LD_LIBRARY_PATH`来指定库的路径。例如,如果库位于`/opt/oracle/lib`目录下,可以执行以下命令: ```bash export LD_LIBRARY_PATH=/opt/oracle/lib:$LD_LIBRARY_PATH ``` 此操作会使当前会话下的程序能够找到共享库[^2]。 #### 3. 更新动态链接器缓存 为了使系统永久识别新增的共享库路径,可以编辑`/etc/ld.so.conf`文件或创建一个新的配置文件(如`/etc/ld.so.conf.d/oracle.conf`),然后将共享库所在的目录添加到文件中。例如: ```bash echo "/opt/oracle/lib" | sudo tee -a /etc/ld.so.conf.d/oracle.conf sudo ldconfig ``` 这将更新系统的动态链接器缓存,使得所有程序都能找到新增的共享库[^2]。 #### 4. 检查库文件的位数 确保共享库文件与操作系统和应用程序的位数匹配。例如,64位的系统应使用64位的库文件。可以通过以下命令检查库文件的位数: ```bash file /opt/oracle/lib/libclntsh.so.19.1 ``` 如果发现位数不匹配,则需要下载并安装正确的版本[^4]。 #### 5. 使用`rpath`指定运行时库路径 如果希望可执行文件在运行时自动查找特定目录下的共享库,可以在编译时使用`-Wl,-rpath`选项。例如: ```bash gcc -o myprogram myprogram.c -L/opt/oracle/lib -lclntsh -Wl,-rpath=/opt/oracle/lib ``` 这样,即使没有设置`LD_LIBRARY_PATH`,程序也能正确加载共享库[^3]。 #### 6. 检查权限问题 确保共享库文件具有适当的权限,允许程序读取和执行。可以使用以下命令检查和修改权限: ```bash ls -l /opt/oracle/lib/libclntsh.so.19.1 chmod 644 /opt/oracle/lib/libclntsh.so.19.1 ``` #### 7. 验证依赖关系 使用`ldd`命令验证可执行文件的依赖关系是否完整。例如: ```bash ldd /path/to/executable ``` 如果输出中显示某些库未找到,则需要安装这些库或调整路径[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值