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

SQL Developer连接12c数据库执行查询后连接重置问题求助

解决SQL Developer连接Oracle 12c时的连接重置/Broken Pipe问题

我之前帮同事排查过几乎一模一样的问题——SQL Developer连12c频繁弹出连接重置提示,偶尔还触发broken pipe错误,但用Python连接却完全正常。结合当时的排查经验,给你几个实用的解决方向:

  • 先排查JDBC驱动兼容性
    旧版本SQL Developer(比如你用的17.2)自带的JDBC驱动可能对12c的新特性支持不足。你可以手动下载适配12c的ojdbc8.jar,替换掉SQL Developer里的旧驱动:

    1. 打开SQL Developer,点击顶部菜单Tools -> Preferences
    2. 展开Database选项,选择Third Party JDBC Drivers
    3. 添加刚下载的ojdbc8.jar,同时移除列表里的低版本驱动(比如ojdbc6.jar)
    4. 重启SQL Developer后再尝试连接
  • 调整数据库端的心跳参数
    很多时候是中间防火墙/路由器把空闲的SQL Developer连接掐断了,而Python的连接自带心跳机制避免了这个问题。找DBA帮忙修改数据库服务器上的sqlnet.ora文件,添加:

    SQLNET.EXPIRE_TIME = 10
    

    这个参数会让数据库每10分钟给客户端发一次心跳包,防止连接被当成空闲连接断开。另外也可以检查用户profile里的IDLE_TIME设置,别让它太短导致系统自动踢掉连接。

  • 给SQL Developer连接添加修复参数
    在编辑连接时,切换到Advanced标签页,使用自定义JDBC URL并加上enableBrokenConnection=true参数,示例:

    jdbc:oracle:thin:@//your-host:1521/your-pdb-service-name?enableBrokenConnection=true
    

    这个参数会让驱动自动尝试修复断开的连接,减少报错概率。同时也可以在Connection标签页把Connection Timeout调长一点(比如设为30秒)。

  • 确认连接字符串用对了服务名
    12c的可插拔数据库(PDB)必须用服务名连接,而非传统的SID。你可以让DBA用lsnrctl status命令查询正确的服务名,确保SQL Developer里填写的是服务名而非SID——很多人都会在这里踩坑。

  • 调整操作系统的TCP保持活跃设置
    部分操作系统默认的TCP超时时间太短,会主动断开空闲连接:

    • Windows:打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,设置KeepAliveTime=300000(5分钟,单位毫秒)、KeepAliveInterval=1000、TcpMaxDataRetransmissions=5,重启系统生效。
    • Mac:在终端执行以下命令(若要永久生效,可将参数写入/etc/sysctl.conf文件):
      sudo sysctl -w net.inet.tcp.keepidle=300000
      sudo sysctl -w net.inet.tcp.keepintvl=1000
      sudo sysctl -w net.inet.tcp.keepinit=1000
      

因为Python连接没问题,说明数据库和网络本身是通的,问题大概率出在SQL Developer的驱动、连接参数或客户端网络设置上,按上面的步骤逐一排查应该能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:12:42