cx_oracle 无法获取 Oracle 环境句柄

cx_oracle Unable to acquire Oracle environment handle

尝试连接到 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

我不知道问题出在哪里。有人可以给我提示吗?

该错误(无法获取 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