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

使用Python连接Oracle数据库出现ORA-12170报错如何解决?

ORA-12170: TNS: Connect timeout occurred 排查解决指南

ORA-12170错误本质是Oracle客户端在超时时间内无法和服务端建立TCP连接,结合你的操作场景,按以下步骤排查即可:

1 确认基础连接信息与网络连通性

  • 先明确你要连接的Oracle实例部署位置:如果Oracle就安装在当前操作的远程台式机上,优先用127.0.0.1/localhost作为数据库地址测试,避免公网链路干扰
  • 如果是连接外部服务器上的Oracle,先在远程台式机的命令行执行ping <数据库IP>确认链路可达,再执行以下命令测试1521默认端口是否开放:
    telnet <数据库IP> 1521
    # 或用nc命令
    nc -zv <数据库IP> 1521
    
    端口访问失败的话,先排查目标Oracle服务器的防火墙、安全组是否开放了1521端口的访问权限,同时确认Oracle监听器处于运行状态。

2 验证Oracle本地连通性(Oracle部署在远程台式机上适用)

  • 在远程台式机命令行执行lsnrctl status查看监听器运行状态,正常输出会展示监听的地址、端口、已注册的数据库服务名/SID
  • 如果监听器未启动,执行lsnrctl start启动后再测试
  • 用sqlplus先验证账号密码、服务名是否正确,测试命令为:
    sqlplus <用户名>/<密码>@//localhost:1521/<服务名>
    
    sqlplus连接失败的话先解决数据库本身的配置、权限问题,再排查Python代码逻辑。

3 调整cx_Oracle连接参数

确认基础连通性正常后,可替换以下两种标准dsn写法测试,避免参数格式错误:

写法1:字符串格式dsn

dsn = "127.0.0.1:1521/你的服务名"
connection = cx_Oracle.connect(user="你的用户名", password="你的密码", dsn=dsn, encoding="utf-8")

写法2:makedsn生成dsn

dsn = cx_Oracle.makedsn(host="127.0.0.1", port=1521, service_name="你的服务名")
connection = cx_Oracle.connect(user="你的用户名", password="你的密码", dsn=dsn, encoding="utf-8")

如果网络存在波动,可新增timeout参数延长超时阈值(单位为秒):

connection = cx_Oracle.connect(user, pw, dsn, encoding='utf8', timeout=15)

4 特殊场景排查

结合你用平板远程操作台式机的场景,以上步骤都验证后仍报错可检查:

  • 远程台式机的本地防火墙是否限制了Python进程访问1521端口
  • 如果是跨公网连接Oracle,部分运营商会封禁1521等常见数据库端口的公网访问,可通过VPN隧道、端口映射更换对外端口的方式规避
  • 确认你填写的数据库地址没有配置错误,不要误写为平板的网络IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:03