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