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

使用cx_Oracle连接Oracle数据库遇ORA-12170:TNS连接超时求助

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

遇到ORA-12170: TNS:Connect timeout occurred这个错误,大概率是网络连通性或者配置参数出了问题,咱们一步步来排查:

  • 先确认网络能通
    先试试用ping *ip*测试你的机器能不能ping通Oracle服务器,如果ping不通,那就是基础网络问题,得先解决这个(比如检查路由、防火墙)。再用telnet *ip* *port*测试端口是否开放,如果telnet连不上,说明服务器的防火墙没开对应端口,或者Oracle监听没在这个端口上运行,找运维帮忙调整防火墙规则或者确认监听端口。

  • 核对TNS配置的每个参数
    你写的DSN里的每个参数都得仔细核对:

    • HOST:是不是Oracle服务器的正确IP?别写错了或者用了内网IP但你的机器不在同一个网段
    • PORT:默认是1521,是不是和服务器上Oracle监听的端口一致?可以在服务器上执行lsnrctl status看监听的端口
    • SERVICE_NAME:这个得和服务器上的数据库服务名完全匹配,同样用lsnrctl status能看到监听的服务名,别把SID和SERVICE_NAME搞混了
  • 检查服务器上的Oracle监听状态
    如果服务器上的监听没启动,肯定连不上。让服务器管理员执行lsnrctl start启动监听,或者lsnrctl status确认监听是正常运行的状态。

  • 试试更简单的EZCONNECT格式连接
    有时候TNS描述符容易写错,换用EZCONNECT格式试试,代码更简洁,也能避免语法错误:

    import cx_Oracle
    # 格式:用户名/密码@IP:端口/服务名
    db = cx_Oracle.connect('*username*/*password*@*ip*:*port*/*service_name*', encoding="UTF-8")
    
  • 确认Oracle客户端配置正确
    如果你的机器上装的是Oracle Instant Client,得确保环境变量配置对了:

    • Windows:把Instant Client的路径加到PATH环境变量里
    • Linux:把Instant Client的路径加到LD_LIBRARY_PATH里,或者在代码里指定:
      cx_Oracle.init_oracle_client(lib_dir="/path/to/instantclient")
      

附上你提供的原代码方便参考:

import cx_Oracle
dsn_tns = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*ip*)(PORT=*port*))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=*service_name*)))'
db= cx_Oracle.connect('*username*', '*password*', dsn_tns, encoding="UTF-8")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:41:32