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文件


版权声明:本文为am540原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。