cx_oracle DPI-1047报错解决方案

问题

python使用cx_oracle连接数据库时报错

DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help.

解决

问题的原因是找不到动态链接文件,一般.so动态链接文件都在/usr/local/instantclient_12_2/libclntsh.so.12.1下,一般安装过orcale客户端都会有

  • 临时方案
    1.先找到oracle具体文件所在文件夹
    locate libclntsh.so
    2.把 libclntsh.so.11.1 所在目录加到环境变量 LD_LIBRARY_PATH 中
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/oracle/product/11.2.0/dbhome_1/lib/
    3.确认LD_LIBRARY_PATH 内容
    echo $LD_LIBRARY_PATH

  • 长久方案
    1.先找到oracle具体文件所在文件夹
    locate libclntsh.so
    2.把 libclntsh.so.11.1 所在目录加到profie中
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/oracle/product/11.2.0/dbhome_1/lib/
    export PATH=/xxxx:$LD_LIBRARY_PATH
    3…刷新环境source /etc/profile

  • 其他
    1.加入动态库/etc/ld.so.conf
    /usr/local/instantclient_12_2
    2.保存后重新加载
    ldconfig

我有次docker镜像中调用宿主容器的oracle库,每次python调用get_db()都会报错failed to connect to database, error: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory,即使我在profile、bashrc等文件写上了so文件所在路径/usr/local/instantclient_12_2都不行,始终都需要source一下才能识别到,最后修改了ld.so.config才完美结局,容器第一次创建启动或者用户新进入容器时都能自动加载到so文件

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值