快捷搜索: 王者荣耀 脱发

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

经验分享 程序员 微信小程序 职场和发展