2014-08-28 97 views
3

背景
我的操作系统是Win7 64bit。
我Python是从蟒-2.7.8.amd64.msi 2.7 64位
我cx_Oracle是一个cx_Oracle-5.0.4-10g-unicode.win-AMD64的py2.7.msi 5.0 64位
我的Oracle客户端是10.1(我不知道32或64个拱,但SQL * Plus是10.1.0.2.0
Python + cx_Oracle:无法获取Oracle环境句柄

数据库
Oracle数据库10g企业版发布10.2.0.4.0 - 64位
PL/SQL版本10.2.0.4.0 - 生产
核心10.2.0.4.0生产
TNS fo R 64位Windows:版本10.2.0.4.0 - 生产
NLSRTL版10.2.0.4.0 - 生产

ORACLE_HOME变量从HAKI回复增加。
C:\ ORACLE \产品\ 10.1.0 \ Client_1与\

不行的问题仍然存在。

ORACLE_HOME尝试从instantclient-basic-win64-10.2.0.5.zip ÇOracle即时:\ instantclient_10_2 \

C:\用户\ PavilionG4> SQLPLUS李/ 123 @ chstchmp
错误6初始化在SQL * Plus
消息文件sp1.msb找不到
SP2-0750:您可能需要ORACLE_HOME设置为您的Oracle软件目录

我的SQL * Plus是不会让我设置了Oracle。

ORACLE_HOME回来的
C:\ ORACLE \产品\ 10.1.0 \ Client_1与\

PATH变量
C:\ Program Files文件(x86)的\希捷SOFTWARE \ 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 \ BIN
C:\ Python27

TNS是:
C:\ ORACLE \产品\ 10.1.0 \ Client_1与\网络\ ADMIN \ tnsnames.ora中
REPORT1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =(PROTOCOL = TCP)(HOST = 172.28.128.110)(PORT = 1521))

(CONNECT_DATA =
(SERVICE_NAME = REPORT1)


f1.py显示我错误
进口cx_Oracle
IP = '172.25.25.42'
端口= 1521
SID ='REPORT1'
dns_tns = cx_Oracle.makedsn(ip,port,SID)
连接= cx_Oracle.connect(U “李”,U “123”,dns_tns)
光标= connection.cursor() connection.close()时

错误
回溯(最近通话最后):
文件 “f1.py”,第6行,在
连接= cx_Oracle.connect(U “李”,U “123”,dns_tns)
cx_Oracle.InterfaceError:无法获得的Oracle环境处理

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

+0

http://stackoverflow.com/questions/13589683/interfaceerror-unable-to-acquire-oracle-environment-handle-oracle-home-is-corr – haki 2014-08-28 08:32:26

+0

它没有帮助。 – Sarit 2014-08-28 09:27:20

+0

我在windows上也有cx_Oracle问题。不能把我的手指放在解决方案上,但要确保你的python/cx/oracle是兼容的32/64等,关于在后台尝试设置运行python的cmd中的ORACLE_HOME建议的解决方案。 – haki 2014-08-28 10:09:19

回答

2

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

+0

谢谢。我现在正在使用java。由于Python尚未成熟。 – Sarit 2015-01-07 16:14:52

+2

哈哈。 cx_Oracle是罪魁祸首,因此是Oracle。不是Python。与cx_Oracle有同样的问题,但一切正常工作与其他数据库连接器。 – comte 2015-02-07 15:15:53