🐛 fix(oceanbase): 新增 OBClient capability 注入打通 Oracle 租户连接

- 双轨路由:Oracle 协议路径按 mysql wire 端口预探测自动选择,OB MySQL wire 端口走 OBClient capability 注入(复刻 Navicat),其他端口走标准 Oracle TNS
- 默认注入 4 组 OBClient capability attribute(_client_name=OceanBase Connector/J、_client_version、__ob_client_attribute_capability_flag、ob_capability_flag),用户在 ConnectionParams 设置的同名键优先级更高
- 恢复 applyOracleChangesMySQLWire:OBClient 路径写操作使用 mysql "?" 占位符 + Oracle 双引号引用标识符,配合 sql_mode='ANSI_QUOTES' 让服务端按 Oracle 解析
- 删除旧的 errOceanBaseMySQLWireOnOracleRoute fail-fast 死路提示,重写文件头注释固化反转决策(基于用户报告 Navicat 用 OceanBase 数据源同端口连通的真实证据)
- 前端 ConnectionModal 文案对齐:去掉「必须 OBProxy Oracle listener」的误导,改为说明自动路由 + connectionAttributes 调试入口
- 新增 5 个单元测试覆盖默认注入、用户覆盖、DSN 透传、mysql wire 占位符;刷新 OceanBase agent revision
This commit is contained in:
Syngnat
2026-05-15 10:54:37 +08:00
parent 6c1f56d50e
commit c7b8663c06
5 changed files with 690 additions and 135 deletions

View File

@@ -4758,7 +4758,13 @@ const ConnectionModal: React.FC<{
<Form.Item
name="oceanBaseProtocol"
label="OceanBase 协议"
help="MySQL 租户选择 MySQLOracle 租户选择 Oracle。OceanBase 租户兼容模式不包含 Native该选择会同时影响连接测试、浏览表结构和 SQL 方言。"
help={
<span>
MySQL MySQLOracle OracleGoNavi OB MySQL wire OBClient capability Navicat OBProxy Oracle listener TNS
<br />
Oracle Error 1235 OBClient <code>connectionAttributes=key1:value1,key2:value2</code> GoNavi OBClient capability
</span>
}
style={{ marginBottom: 0 }}
>
<Select