DATABASES

支持的数据库

内置 MySQL 和 PostgreSQL 驱动,其余数据库通过独立 ClassLoader 动态加载驱动 jar

MySQL MariaDB Oracle SQL Server DB2 PostgreSQL OpenGauss 达梦 DM 人大金仓 KingBase 南大通用 GBase 神通 Oscar H2 (内嵌元数据库)
还支持自定义数据库:提供 JDBC URL、驱动类名与驱动 jar 路径,运行时动态加载。
使用 URLClassLoader + DriverShim 注册,发行包不必捆绑商业驱动,也不会因驱动版本冲突污染应用类加载器
IDEMPOTENT WRITE

各库 upsert 语法对照

每一行都通过基于主键的 upsert 写入,重复执行收敛到同一状态 —— 这把「至少一次投递」变成了「结果上的恰好一次」

数据库语句
MySQL / MariaDBINSERT ... ON DUPLICATE KEY UPDATE
PostgreSQL 系INSERT ... ON CONFLICT (pk) DO UPDATE
Oracle / 达梦 DMMERGE INTO ... USING (SELECT ? FROM DUAL)
SQL ServerMERGE ... WITH (HOLDLOCK)
DB2MERGE INTO ... USING (VALUES (?))
通用 / 自定义UPDATE-then-INSERT(无原生 upsert 时的兜底,含唯一冲突重试)
无主键表:无法识别既有行,因此无法保证幂等,重放可能产生重复行。工具会明确告警,建议为表添加主键。
DRIVER LOADING

驱动动态加载机制

发行包不必捆绑一堆商业驱动,也不会因为驱动版本冲突污染应用类加载器

内置驱动

MySQL / PostgreSQL / H2 三种。这三个驱动都是宽松开源许可,可以随发行包分发。

其余数据库

在连接配置中填写驱动 jar 路径,工具会用独立 URLClassLoader 加载,并通过 DriverShim 注册到 DriverManager

把驱动 jar 放到服务器上

bash
mkdir -p /opt/synctool/drivers
cp ojdbc8.jar DmJdbcDriver18.jar kingbase8-8.6.0.jar /opt/synctool/drivers/

然后在「数据库连接」页面新建连接时,填写驱动 jar 路径(如 /opt/synctool/drivers/ojdbc8.jar) 与驱动类名(选择预设类型时会自动填好)。点击「测试连接」验证加载成功即可保存。

📄 许可提示:第三方 JDBC 驱动不随本项目分发,其许可条款由各自厂商单独约定 —— 尤其是 Oracle、DB2 及国产数据库的驱动,请自行确认使用授权。
XINCHUANG

为信创迁移而生

Oracle / SQL Server → 国产库的替换场景是本工具的主战场

🇨🇳 国产数据库是一等选项,不是「也许能连上」

达梦、人大金仓、南大通用、神通、OpenGauss 各自有专门的方言实现,而不是靠通用 JDBC 蒙。已处理的差异包括:

  • upsert 写法 —— MERGE INTO ... FROM DUAL 这类 Oracle 系特有语法
  • 类型上限 —— Oracle VARCHAR2 4000、SQL Server 4000、DB2 DECIMAL 31;无精度 NUMBER 不产生 DECIMAL(0,0)
  • 精度裁剪 —— 已声明的精度被裁剪到上限而不丢失小数位
  • 函数名差异 —— 如 SUBSTRSUBSTRING,且不会二次命中自身
  • 标识符引号规则 —— 各产品的引号字符与大小写敏感性不同
  • 不可移植的默认值 —— 被丢弃而非生成非法 DDL

这恰恰是 Debezium、Canal 生态最薄弱的地方 —— 它们基本不支持国产数据库。