問題背景
- 數(shù)據(jù)庫原來是11g,通過python+cx_Oracle進(jìn)行日常的腳本執(zhí)行;
- 數(shù)據(jù)庫升級19c后,調(diào)整數(shù)據(jù)庫連接字符串后,發(fā)現(xiàn)連接不上數(shù)據(jù)庫,報(bào):
cx_Oracle.DatabaseError: ORA-28040: No matching authentication protocol
問題分析
- 考慮到可能是cx_Oracle和OracleClient版本問題,于是進(jìn)行了調(diào)整
- 下載新版本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中;
- 遇到的問題
- 在我本地機(jī)器上,通過升級以上兩個版本,問題解決,可以連接19c數(shù)據(jù)庫;
- 在同事的機(jī)器上出現(xiàn),ImportError: DLL load failed: 找不到指定的模塊。
- 最終解決
- 同事在使用cx_Oracle-5.3-12c 版本,然后將Oracle-Client的版本調(diào)整為19以上,發(fā)現(xiàn)問題解決;
- 考慮到這個問題后,模擬在原cx_Oracle-5.2.1-11g的版本下,將Oracle-Clietn的版本調(diào)整為19c也能解決;
疑惑
- 網(wǎng)上的教程,基本都要求 cx_Oracle版本需要和Oracle-Client的版本對應(yīng),為什么不對應(yīng)還能正常使用?這個對應(yīng)關(guān)系是什么?我的電腦為什么是可以的?