2014-08-28 59 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