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

从AWS连接本地Oracle 19c超时故障排查求助

AWS连接本地Oracle 19c超时排查问题

问题背景

从AWS环境连接本地部署的Oracle 19c数据库,已配置AWS安全组允许针对该Oracle服务器IP的1521端口规则,但应用因JPA无法解析主机名(实际使用IP)导致连接超时;编写的Java测试工具同样连接失败。

测试代码

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
try (Connection conn = DriverManager.getConnection(url)) {
    if (conn != null) {
        System.out.println("Connected");
    }
}

抛出的异常

Caused by: java.io.IOException: Connection timed out, socket connect lapse 127236 ms. /10.20.30.40 1521 0 1 true
        at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:233)
        at oracle.net.nt.ConnOption.connect(ConnOption.java:174)
        at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:510)
        ... 12 more
Caused by: java.net.ConnectException: Connection timed out
        at java.base/sun.nio.ch.Net.connect0(Native Method)
        at java.base/sun.nio.ch.Net.connect(Net.java:483)
        at java.base/sun.nio.ch.Net.connect(Net.java:472)
        at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:692)
        at java.base/java.nio.channels.SocketChannel.open(SocketChannel.java:194)
        at oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:99)

已尝试操作

运行以下命令试图查看网络通信,但无输出:

java -Djavax.net.debug=all -jar oracle-test.jar jdbc:oracle:thin:user/secret@10.20.30.40:1521/DB_SVC

排查建议

  • 确认本地Oracle服务器的网络可达性:
    • 检查10.20.30.40是否为内网IP,如果是,AWS资源无法直接访问,需确认本地服务器是否有公网IP,或是否通过VPN/专线打通了AWS VPC与本地网络。若有公网IP,替换测试URL中的内网IP重试。
  • 验证Oracle监听与本地防火墙配置:
    • 在本地服务器执行netstat -an | grep 1521(Linux)或netstat -ano | findstr 1521(Windows),确认监听是否绑定0.0.0.0(允许所有IP访问),而非仅127.0.0.1或内网IP。
    • 用公网端口检测工具(浏览器可访问的类型)测试本地服务器公网IP的1521端口,若检测不到,说明本地防火墙(iptables/Windows防火墙)未放行1521端口,需调整规则。
  • 核对AWS网络配置方向:
    • 确认安全组规则是出站规则:AWS资源连接本地服务器,需要AWS资源所在安全组的出站规则允许访问目标IP的1521端口,而非入站规则,很多人容易搞反方向。
    • 若AWS资源在私有子网,需确认是否配置了NAT网关(访问公网场景)或VPN/专线路由(访问本地内网场景)。
  • 简化JDBC URL测试:
    • 尝试用SID格式的URL:jdbc:oracle:thin:@10.20.30.40:1521:DB_SID(用冒号分隔SID,而非斜杠的服务名),排除服务名配置问题。
  • 测试基础网络连通性:
    • 若能登录AWS应用服务器,执行telnet 10.20.30.40 1521或nc -zv 10.20.30.40 1521,若超时则确定是纯网络问题,与Java无关。
    • 若无法登录AWS服务器,在测试工具中添加基础Socket连接代码,排除JDBC驱动问题:
      try (Socket socket = new Socket()) {
          socket.connect(new InetSocketAddress("10.20.30.40", 1521), 5000);
          System.out.println("Socket connected successfully");
      } catch (IOException e) {
          e.printStackTrace();
      }
      
  • 检查Java代理设置:
    • 若AWS环境配置了代理,需确保Java进程继承代理设置,或在启动测试工具时禁用代理:
      java -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort= -jar oracle-test.jar jdbc:oracle:thin:user/secret@10.20.30.40:1521/DB_SVC
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:38:14