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

OCI中VM连接自治数据库失败求助:Java/JDBC mTLS连接超时

解决方案:OCI VM连接自治数据库mTLS/Wallet超时问题

针对本地可正常连接、VM中连接卡顿超时并抛出IO Error: Undefined Error的问题,从网络配置、防火墙、连通性验证等维度逐一排查:

1. 检查VM子网安全组出站规则

确保VM所在子网的安全组允许出站TCP流量到自治数据库端口(默认1522):

  • 登录OCI控制台,进入VM所在的子网安全组
  • 添加出站规则:
    • 协议:TCP
    • 目标端口范围:1522
    • 源:VM的私有IP(或0.0.0.0/0用于测试)
    • 目标:自治数据库公网IP段(或0.0.0.0/0用于测试)

2. 验证VM本地防火墙设置

如果VM是Linux系统,检查本地防火墙是否阻止了1522端口的出站流量:

  • 临时关闭防火墙测试:
    # firewalld
    systemctl stop firewalld
    # iptables
    systemctl stop iptables
    
  • 若测试正常,添加永久允许规则:
    # firewalld
    firewall-cmd --add-port=1522/tcp --permanent
    firewall-cmd --reload
    # iptables
    iptables -A OUTPUT -p tcp --dport 1522 -j ACCEPT
    service iptables save
    

3. 测试VM到数据库的网络连通性

直接验证VM能否访问数据库的端口:

  • 使用telnet测试:
    telnet <数据库主机名> 1522
    
  • 或使用nc工具:
    nc -zv <数据库主机名> 1522
    
    如果连接失败,说明网络链路存在阻塞,优先排查安全组、路由表配置;如果连接成功,再排查应用层面配置。

4. 确认Wallet配置完整性与权限

  • 确保VM中的Wallet文件完整无损坏,与本地使用的Wallet一致
  • 检查Java进程对Wallet目录的读取权限:
    chmod -R 755 /path/to/wallet-directory
    
  • 确认JDBC URL中的TNS_ADMIN路径正确,例如:
    String url = "jdbc:oracle:thin:@your_db_tns_entry?TNS_ADMIN=/opt/oracle/wallet";
    

5. 检查VM子网路由表

若通过公网访问自治数据库,确认VM所在子网的路由表包含默认路由(0.0.0.0/0)指向互联网网关(IGW):

  • 进入OCI控制台的子网路由表页面,查看是否存在目标为0.0.0.0/0、下一跳为IGW的路由规则

6. 尝试禁用NIO连接模式

报错堆栈涉及NSProtocolNIO.negotiateConnection,可强制JDBC使用阻塞模式:
在JDBC URL中添加参数oracle.net.NON_BLOCKING_CONNECTION=false:

String url = "jdbc:oracle:thin:@your_db_tns_entry?TNS_ADMIN=/opt/oracle/wallet&oracle.net.NON_BLOCKING_CONNECTION=false";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:39:59