找不到64位的客户端
报错:cx_Oracle.DatabaseError:DPI-1047:Cannot locate a 64-bit Oracle Client library:“libnnz11.so” cannot open shared object file : No such file or directory".
关于上述报错可能涉及到在Linux中连接Oracle库时候用到的2个二进制库,libnnz11.so和libclntsh.so,将Oracle客户端中的这两个二进制库软链接到/usr/lib/目录下,重启应用即可。
ln -s /home/me/oracle/lib/libclntsh.so /usr/lib/libclntsh.so
ln -s /home/me/oracle/lib/libnnz11.so /usr/lib/libnnz11.so
ORA-01804
cx_Oracle.DatabaseError:Error while trying to retrieve text for error ORA-01804
上述报错是因为缺少libociicus.so包,我们生成一个这个包,软连接到/usr/lib下,首先我我们先搜索一下这个名字的目录:rdbms,一般在#ORACLE_HOME目录下,然后
find / -type d -name rdbms
mkdir -p $ORACLE_HOME/rdbms/install/instantclient/light
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk igenlibociicus
这样就会在$ORACLE_HOME/rdbms/install/instantclient/light目录下生成一个libociicus.so的文件,将这个文件链接到/usr/lib下:
ln -s $ORACLE_HOME/rdbms/install/instantclient/light/libociicus.so /usr/lib/libociicus.so
ORA-28547
上述报错是因为缺少libociie.so包,我们生成一个这个包,软连接到/usr/lib下:
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk igenlibociei
会在$ORACLE_HOME/instantclient目录下生成上述文件,链接:
ln -s $ORACLE_HOME/instantclient/libociie.so /usr/lib/libociie.so
重启服务即可正确连接和操作Oracle数据库。
可能原因是:celery连接Oracle数据库的时候是通过oci方式去连接的,而我们在python交互界面中是通过其他方式去连接的,就导致在python交互中测试连接的时候只要解决找不到64位的客户端的问题就可以正常连接,而在celery中还会报有关于liboci的错误。