【问题标题】:Python + cx_Oracle : Unable to acquire Oracle environment handlePython + cx_Oracle:无法获取 Oracle 环境句柄
【发布时间】:2014-08-28 07:10:41
【问题描述】:

背景
我的操作系统是 Win7 64 位。
我的 Python 是来自 python-2.7.8.amd64.msi 的 2.7 64bit
我的 cx_Oracle 是来自 cx_Oracle-5.0.4-10g-unicode.win-amd64-py2.7.msi
的 5.0 64bit 我的 Oracle 客户端是 10.1(我不知道 32 或 64 拱,但 SQL*Plus 是 10.1.0.2.0

数据库
Oracle 数据库 10g 企业版版本 10.2.0.4.0 - 64 位
PL/SQL 版本 10.2.0.4.0 - 生产
CORE 10.2.0.4.0 生产
适用于 64 位 Windows 的 TNS:版本 10.2.0.4.0 - 生产
NLSRTL 版本 10.2.0.4.0 - 生产

ORACLE_HOME 变量从 haki 回复中添加。
C:\Oracle\product\10.1.0\Client_1\

不工作的问题仍然存在。

ORACLE_HOME 从instantclient-basic-win64-10.2.0.5.zip 试用Oracle Instant C:\instantclient_10_2\

C:\Users\PavilionG4>sqlplus Lee/123@chstchmp
初始化 SQL*Plus 时出现错误 6
找不到消息文件 sp1.msb
SP2-0750:您可能需要将 ORACLE_HOME 设置为您的 Oracle 软件目录

我的sql*plus不让我设置Oracle。

ORACLE_HOME回到
C:\Oracle\product\10.1.0\Client_1\

PATH 变量
C:\Program Files (x86)\Seagate Software\NOTES\
C:\Program Files (x86)\Seagate Software\NOTES\DATA\
C:\Program Files (x86)\Java\jdk1.7.0 _05\bin
C:\Oracle\product\10.1.0\Client_1\bin
C:\Oracle\product\10.1.0\Client_1\jre\1.4.2\bin\client
C: \Oracle\product\10.1.0\Client_1\jre\1.4.2\bin
C:\app\PavilionG4\product\11.2.0\dbhome_1\bin
C:\app\PavilionG4\product\11.2 .0\client_2\bin
c:\Program Files (x86)\AMD APP\bin\x86_64
c:\Program Files (x86)\AMD APP\bin\x86
C:\Windows\ system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
c:\Program Files (x86)\ATI Technologies\ ATI.ACE\Core-Static
C:\Users\PavilionG4\AppData\Local\Smartbar\Application\
C:\PROGRA~2\IBM\SQLLIB\BIN
C:\PROGRA~2\ IBM\SQLLIB\FUNCTION
C:\Program Files\gedit\bin
C:\Kivy-1.7.2-w32
C:\Program Files (x86)\ZBar\binj
C: \Program Files (x86)\Java\jdk1.7.0_05\bin
C:\Program Files\MATLAB\R2013a\runtime\win64
C:\Program Files\MATLAB\R2013a\b在
C:\Python27

TNS 是:
C:\Oracle\product\10.1.0\Client_1\NETWORK\ADMIN\tnsnames.ora
报告1 =
(描述 =
(地址列表 =
(地址 = (协议 = TCP)(主机 = 172.28.128.110)(端口 = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = REPORT1)
)
)

f1.py 显示错误
导入 cx_Oracle
ip = '172.25.25.42'
端口 = 1521
SID = '报告 1'
dns_tns = cx_Oracle.makedsn(ip,port,SID)
连接 = cx_Oracle.connect(u"Lee",u"123",dns_tns)
游标 = 连接。游标() 连接.close()

错误
回溯(最近一次通话最后一次):
文件“f1.py”,第 6 行,在
连接 = cx_Oracle.connect(u"Lee",u"123",dns_tns)
cx_Oracle.InterfaceError: 无法获取 Oracle 环境句柄

问题
1、如何获取Oracle环境句柄?
我已经搜索了网站。不幸的是,他们根本没有遇到我的问题。
2. 如何让 Python 使用另一个 Oracle 客户端而不影响现有客户端?

【问题讨论】:

  • 我在 Windows 上也遇到了 cx_Oracle 的问题。无法解决解决方案,但请确保您的 python/cx/oracle 兼容 32/64 等关于帖子中建议的解决方案 - 尝试在运行 python 的 cmd 中设置 ORACLE_HOME。

标签: python oracle


【解决方案1】:

如果 python 在路径中找到多个 OCI.DLL 文件(即使它们相同),它将抛出此错误。 (您的路径声明看起来可能会抛出不止一个)。您可以操纵脚本中的路径来限制 python 在哪里寻找支持的 ORACLE 文件,如果您必须在本地运行多个版本的 oracle/clients,这可能是您唯一的选择。

【讨论】:

  • 谢谢。我现在正在使用java。由于 Python 还不成熟。
  • 哈哈。 cx_Oracle 是罪魁祸首,因此是 Oracle。不是 Python。与 cx_Oracle 有同样的问题,但在其他数据库连接器上一切正常。
猜你喜欢
  • 2017-02-08
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多