cx_oracle无法获取Oracle环境句柄

时间:2016-09-30 09:35:23

标签: django oracle python-2.7 database-connection cx-oracle

尝试连接到Oracle数据库时出现以下错误:

File "test.py", line 5, in <module>
    conn = cx_Oracle.Connection('dbuser/dbpass@fqdn')
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

测试代码:

import os
#os.environ['ORACLE_HOME']='/oracle/client/112_64/'
import cx_Oracle

conn = cx_Oracle.Connection('dbuser/dbpass@fqdn')

我的路径设置如下:

ORACLE_BASE=/oracle/oracle-client
ORACLE_HOME=/oracle/oracle-client/112_64
LD_LIBRARY_PATH=/oracle/client/112_64/:/oracle/oracle-client/112_64/lib/
PATH=/oracle/oracle-client/112_64/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/my_user/bin

根据libocci.so.11.1安装的Oracle版本为11g,cx_Oracle版本为5.2.1

我不知道问题可能是什么。有人可以给我一些提示吗?

1 个答案:

答案 0 :(得分:0)

该错误(无法获取Oracle环境句柄)是Oracle告诉您配置有问题的方法。在您的情况下,您有不同的路径,可能是问题的根源。一个说“/ oracle / oracle-client”,另一个说“/ oracle / client”。你应该找出哪一个是正确的,并相应调整。

您可以使用SQL * Plus连接到数据库。如果有效,那么cx_Oracle也应该有用。

您还可以使用ldd命令查明系统是否找到了正确的库。像这样:

ldd /path/to/cx_Oracle.so

如果您有针对12c编译的cx_Oracle版本但正在使用11g客户端(例如),则也会出现此错误。或者您同时加载了两个不同客户端的点点滴滴。但在你的情况下,我强烈怀疑相互冲突的路径!

如果您使用的是基于RPM的Linux发行版(Oracle Linux,Red Hat Linux,Fedora等),我强烈建议您使用提供的即时客户端RPM。它们使配置变得非常简单,并且不需要环境变量来构建和安装cx_Oracle(从5.2开始)。您可以在此处找到它们:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html