You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下Python用cx_Oracle连Oracle报ORA-03135错误求助

解决cx_Oracle连接Oracle时的ORA-03135错误

结合你描述的情况(sqlplus和tnsping正常、防火墙已排除、sqlnet.ora参数调整无效),分享几个我实际排查过这类问题的有效方向:

  • 确认cx_Oracle与Oracle客户端版本兼容性
    这是最容易踩的坑:cx_Oracle的版本必须和你安装的Oracle Instant Client(或本地Oracle客户端)主版本匹配。比如用Oracle 19c客户端就不能装cx_Oracle 8.x以下版本;要是Oracle 11g客户端,cx_Oracle最高只能用到7.3.x版本。
    你可以先打印当前cx_Oracle版本:

    import cx_Oracle
    print(cx_Oracle.version)
    

    对照官方版本兼容矩阵确认后,卸载不匹配版本重新安装:

    pip uninstall cx_Oracle
    pip install cx_Oracle==[对应兼容版本号]
    
  • 检查Oracle客户端环境变量配置
    Windows下要确保Oracle Instant Client路径已加入系统PATH,且放在可能冲突的路径(比如其他软件自带的旧Oracle组件路径)前面。同时配置好以下变量:

    • ORACLE_HOME:指向Oracle客户端安装目录(例:C:\instantclient_19_12)
    • TNS_ADMIN:指向包含tnsnames.ora和sqlnet.ora的目录,若文件在客户端network\admin下,可设为%ORACLE_HOME%\network\admin
  • 尝试跳过makedsn,直接用连接字符串
    有时候makedsn生成的DSN会有隐藏问题,试试更直接的连接方式:

    import cx_Oracle
    conn = cx_Oracle.connect('username/passwd@host:port/service_name')
    
  • 调整服务器端sqlnet.ora配置
    你只修改了本地客户端的配置,但服务器端参数也会影响连接。建议把服务器端的SQLNET.INBOUND_CONNECT_TIMEOUT从3秒调至60秒(太短容易触发超时),同时确保服务器端也配置了SQLNET.EXPIRE_TIME=10,保持两端参数一致。

  • 验证Python与Oracle客户端位数匹配
    64位Python必须搭配64位Oracle Instant Client,32位Python则用32位客户端,位数不匹配必然出现连接故障。你可以通过python --version查看位数(输出里的AMD64代表64位)。


内容的提问来源于stack exchange,提问作者akei9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:29:06