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

Oracle数据库ORA-12537错误:Python连接Oracle失败求助

解决ORA-12537: TNS:connection closed连接错误

我来帮你排查这个让人头疼的ORA-12537错误,这个问题通常和网络连通性、Oracle服务配置或者客户端环境不兼容有关,咱们一步步来定位:

  • 先确认网络是否通畅
    先排除最基础的网络问题:

    • 用ping <你的Oracle服务器IP>测试能不能通,如果丢包或者不通,先找运维解决网络/防火墙问题;
    • 用telnet <你的Oracle服务器IP> <端口号>(默认是1521)测试端口是否开放,如果连不上,要么是服务器防火墙没开1521端口,要么是Oracle监听服务没启动。
  • 检查Oracle监听状态
    登录到Oracle服务器上,执行lsnrctl status命令,看看监听是否正常运行:

    • 如果显示"Listener is not running",就用lsnrctl start启动监听;
    • 确认监听输出里有没有你要连接的端口和服务名,比如有没有(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))和对应的Service "xe" has 1 instance(s)这样的条目。
  • 确认服务名绝对正确
    别猜服务名,直接在服务器上查:

    • 登录SQL*Plus,执行SELECT name FROM v$database;获取CDB名称;
    • 如果是PDB,执行SELECT name FROM v$pdbs;获取正确的PDB名称;
      另外可以看监听日志(路径一般是$ORACLE_BASE/diag/tnslsnr/你的服务器名/listener/trace/listener.log),里面会记录你的连接尝试,能看到服务名是否匹配。
  • 检查cx_Oracle和Oracle客户端兼容性
    确保你的cx_Oracle版本和安装的Oracle Instant Client版本匹配,而且客户端版本和服务器版本不要相差太大(比如服务器是19c,客户端用18c或19c最稳妥)。如果客户端版本太老,很可能出现奇怪的连接关闭问题。

  • 换一种连接方式试试
    可以先配置tnsnames.ora文件(如果是Instant Client,放在network/admin目录下),写清楚连接串:

    MY_ORACLE =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = <你的服务器IP>)(PORT = <端口>))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = <正确的服务名>)
        )
      )
    

    然后用con = cx_Oracle.connect("username/password@MY_ORACLE")连接,这样能排除连接字符串格式的问题。

  • 检查服务器连接限制
    有时候服务器连接数满了也会直接关闭新连接,登录SQL*Plus执行SELECT value FROM v$parameter WHERE name='processes';看看最大连接数,再用SELECT COUNT(*) FROM v$session;看当前连接数,如果接近上限,需要调整processes参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:09