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

使用虚拟主机名'oracle'的SAP Connector Oracle JDBC连接失败问询

SAP Connector Oracle JDBC连接串替换逻辑导致连接失败问题排查与修复建议

问题现象

原本可用的Oracle JDBC连接串为jdbc:oracle:thin:@myremotehost:1521:mysid,在SAP Connector中按规范配置虚拟主机名oracle、虚拟端口61521后,生成的连接串为jdbc:oracle:thin:@oracle:61521:mysid,此时抛出连接异常:

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection: DataSource returned null from getConnection(): org.ops4j.pax.jdbc.impl.DriverDataSource@45d186af

排查步骤

  • 在远程数据库服务器安装SAP JDK 8
  • 用Maven构建模拟SAP Connector技术栈的独立JAR(依赖Spring-Boot/Spring-JDBC/HikariCP/Oracle JDBC)
  • 使用原连接串测试该JAR,连接成功
  • 在远程服务器/etc/hosts中添加映射oracle XXX.XXX.XXX.XXX(XXX为myremotehost的实际IP)
  • 使用jdbc:oracle:thin:@oracle:1521:mysid测试JAR,连接成功
  • 将虚拟主机名改为myoracle,生成连接串jdbc:oracle:thin:@myoracle:61521:mysid,SAP Connector连接成功

问题根源分析

经分析,问题源于SAP Connector采用Java String.replace()进行全局字符串替换:

  • 会将连接串中所有的oracle替换为myremotehost
  • 同时将61521替换为1521

最终连接串被修改为无效的jdbc:myremotehost:thin:@myremotehost:1521:mysid,破坏了JDBC URL中标识驱动类型的第一个oracle字段,导致驱动无法正确解析连接串,进而无法建立数据库连接。

修复建议

建议SAP Connector开发团队修改连接串替换逻辑,避免全局替换带来的问题,可采用以下两种方式:

  • 使用正则表达式精准匹配@符号右侧的主机名和端口进行替换
  • 仅截取@符号后的子串进行替换操作,再拼接回原URL的前缀部分

同时期望SAP官方修复此问题并创建对应的Bug记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:15:29