Python安装cx_Oralce连接Oracle数据库
2021-08-26 本文已影响0人
暖小忧
问题背景
- 数据库原来是11g,通过python+cx_Oracle进行日常的脚本执行;
- 数据库升级19c后,调整数据库连接字符串后,发现连接不上数据库,报:
cx_Oracle.DatabaseError: ORA-28040: No matching authentication protocol
问题分析
- 考虑到可能是cx_Oracle和OracleClient版本问题,于是进行了调整
- 下载新版本cx_Oracle:cx_Oracle-5.3-12c.win-amd64-py3.5-2.exe
cx_Oracle下载地址:https://pypi.org/project/cx-Oracle/7.0.0/#files
OracleClietn下载地址(需要Oracle账号):https://www.oracle.com/database/technologies/instant-client/downloads.html - 下载新版本OracleClient:instantclient-basic-windows.x64-12.2.0.1.0.zip
- 在5.2.1-11g版本,OracleClient使用的是 oci.dll等几个dll,换新版本后,将Client中的dll文件全部放入site-package中;
- 遇到的问题
- 在我本地机器上,通过升级以上两个版本,问题解决,可以连接19c数据库;
- 在同事的机器上出现,ImportError: DLL load failed: 找不到指定的模块。
- 最终解决
- 同事在使用cx_Oracle-5.3-12c 版本,然后将Oracle-Client的版本调整为19以上,发现问题解决;
- 考虑到这个问题后,模拟在原cx_Oracle-5.2.1-11g的版本下,将Oracle-Clietn的版本调整为19c也能解决;
疑惑
- 网上的教程,基本都要求 cx_Oracle版本需要和Oracle-Client的版本对应,为什么不对应还能正常使用?这个对应关系是什么?我的电脑为什么是可以的?