报错信息:
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
问题描述:
运行python程序调用oracle数据库,出现上述错误。
解决办法:
找到orcale客户端安装路径,我的安装路径在:/home/oracle/instantclient_11_2
注意orcale 客户端目录按自己实际安装路径配置。
- 方案一:修改LD_LIBRARY_PATH(在 ~/.bashrc)
vi ~/.bashrc
# 把一下内容添加到最后行,注意调整oracle客户端安装目录 /home/oracle/instantclient_11_2
export LD_LIBRARY_PATH=/home/oracle/instantclient_11_2:$LD_LIBRARY_PATH
# 保存运行
source ~/.bashrc
- 方案二:修改/etc/ld.so.conf
vi /etc/ld.so.conf;
--------------------------------------
#末尾追加 根据你安装oracle版本驱动路径
/home/oracle/instantclient_11_2
#保存运行
ldconfig;
- 方案三:用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
ln -s /home/oracle/instantclient_11_2/*.so* /usr/lib
ldconfig
原因:
libclntsh.so是OCI客户端运行时库,Oracle如果程序使用了oci读写数据库必定会装载这个库。一般位于你安装的oracle客户端目录下,比如我的位于/home/oracle/instantclient_11_2中。
程序运行时会去两个路径下寻找:1、/etc/ld.so.conf所列路径下;2、当前用户的环境变量LD_LIBRARY_PATH。如果这两个地方都找不到就会报错,说找不到这个库。