Win64安装cx_Oracle过程

学习python过程中,因需要连接oracle数据库,所以要安装cx_Oracle。


我的电脑是WIN64,python是2.7版本,本地oracle client是32位的。安装过cx_Oracle-5.2.1-11g.win-amd64-py2.7 (Oracle 11g, Python 2.7)后,import cx_Oracle报错,提示importError: DLL load failed: 不是有效的Win32程序。看到dll后了想到cx_Oracle是要调用OCI来联接Oracle数据库的。我本机上的oracle_10g_client是32位的。一个64位的程序调用32位的动态库当然会出错了。

根据文章http://blog.csdn.net/huzhenwei/article/details/3946308指点,去oracle网站下载了instance client,地址是http://www.oracle.com/technology/software/tech/oci/instantclient/index.html。我下载了instantclient-basic-windows.x64-11.2.0.2.0.zip这个版本。解压缩后没有看到安装文件,百度看了一下发现不需要安装,只需要设置几个环境变量就行了。比如我把下载的instantclient-basic-nt-11.2.0.2.0.zip压缩包解压,放到 C:\instantclient_11_2 目录下。在“环境变量”的“系统变量”中增加:

ORACLE_HOME = C:\instantclient_11_2
TNS_ADMIN = C:\instantclient_11_2
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改Path变量,在后面添加 C:\instantclient_11_2

然后把解压包中的oci.dll文件放到%python_home%\Lib\site-packages 下,再次imoprt不会报错了。

使用cx_Oracle源码包中的readme.txt文件中的例子测试一下。一句connection = cx_Oracle.connect("user", "password", "TNS")贴进去,提示cx_Oracle Interface Error: Unable to acquire Oracle enviroment handle。启动PLSQL登陆打开的是刚才的tns,但登陆就报错ORA-1以为是instance client和之前安装的32位oracle client冲突,ORA-12557。感觉是这个64位的instance client与之前装的32位oracle client冲突了。于是把环境变量里的ORACLE_PATH删掉,就可以登陆PLSQL了。但测试语句还是报那个错。折腾了半天,最后死马当活马医吧,尝试着把C:\instantclient_11_2里面的dll文件都拷贝到了python的%python_home%\Lib\site-packages目录下,又RUN了一下,居然不报错了。 然后逐个删掉,最后发现oraociei11.dll删掉会报错,而其它dll删掉重新Run都不会报错。

不过使用PLSQL登陆还是会报错,只好把环境变量ORACLE_HOME删掉了,并不影响cx_Oracle的使用。原理不太清楚,先记录下来。





你可能感兴趣的:(python)