内置 MySQL 和 PostgreSQL 驱动,其余数据库通过独立 ClassLoader 动态加载驱动 jar
URLClassLoader + DriverShim 注册,发行包不必捆绑商业驱动,也不会因驱动版本冲突污染应用类加载器。
每一行都通过基于主键的 upsert 写入,重复执行收敛到同一状态 —— 这把「至少一次投递」变成了「结果上的恰好一次」
| 数据库 | 语句 |
|---|---|
| MySQL / MariaDB | INSERT ... ON DUPLICATE KEY UPDATE |
| PostgreSQL 系 | INSERT ... ON CONFLICT (pk) DO UPDATE |
| Oracle / 达梦 DM | MERGE INTO ... USING (SELECT ? FROM DUAL) |
| SQL Server | MERGE ... WITH (HOLDLOCK) |
| DB2 | MERGE INTO ... USING (VALUES (?)) |
| 通用 / 自定义 | UPDATE-then-INSERT(无原生 upsert 时的兜底,含唯一冲突重试) |
发行包不必捆绑一堆商业驱动,也不会因为驱动版本冲突污染应用类加载器
仅 MySQL / PostgreSQL / H2 三种。这三个驱动都是宽松开源许可,可以随发行包分发。
在连接配置中填写驱动 jar 路径,工具会用独立 URLClassLoader 加载,并通过 DriverShim 注册到 DriverManager。
mkdir -p /opt/synctool/drivers cp ojdbc8.jar DmJdbcDriver18.jar kingbase8-8.6.0.jar /opt/synctool/drivers/
然后在「数据库连接」页面新建连接时,填写驱动 jar 路径(如 /opt/synctool/drivers/ojdbc8.jar)
与驱动类名(选择预设类型时会自动填好)。点击「测试连接」验证加载成功即可保存。
Oracle / SQL Server → 国产库的替换场景是本工具的主战场
达梦、人大金仓、南大通用、神通、OpenGauss 各自有专门的方言实现,而不是靠通用 JDBC 蒙。已处理的差异包括:
MERGE INTO ... FROM DUAL 这类 Oracle 系特有语法DECIMAL(0,0)SUBSTR → SUBSTRING,且不会二次命中自身这恰恰是 Debezium、Canal 生态最薄弱的地方 —— 它们基本不支持国产数据库。