Repository navigation
Jync v1.12.0 · 同步前检查、内容校验与诊断包
Jync v1.12.0
新增
- 同步前检查:项目页可在不写入任何数据的情况下排练下一轮:源/目标连通性、待执行的 CREATE/ALTER/DROP、目标表缺失/缺列/类型不兼容、游标列与索引、CDC 可用性,以及 binlog CDC 的表布局漂移(停机期间源表跑过 DDL 会在预检报错并提示重建基线)。结果按 ERROR / WARN / OK / SKIP 分组。
- 内容级校验:增量同步后按主键抽样比对源与目标的行值,能发现「行数相同但内容不同」(更新丢失、截断、类型转换错误)。差异只写变更记录并发
DATA_DRIFT告警,不自动修复;支持管理员手工触发单表检查。 - 一键诊断包:设置页管理员一键导出 zip(版本、配置、连接、项目、进度、CDC 位点、近期变更与日志),密码、密钥、
data/与原始配置均不入包。 - 真实库验证矩阵:新增验证矩阵文档与本地执行脚本;MariaDB 11.4、ClickHouse 24.8 纳入自动化容器测试。
优化
- 内容校验比较口径:比对前先做列清洗,数字、时间、布尔等统一规范化,时间按墙钟对齐;LOB、JSON、XML、几何等不可比列自动排除,减少误报。
- 诊断包二次脱敏:白名单之外再对密码 / 密钥 / token 类赋值、
enc:密文、Bearer、URL 账号信息、私钥块做替换或截断。
修复
- MariaDB 适配:修正负 fetch size 导致的
invalid fetch size(改用正数流式读取);预设 URL 加useAffectedRows=true,空转 upsert 不再被记成更新,行数审计与结果计数恢复准确。 - 视图 / 存过转换:补全
DECODE/NVL2 → CASE、分页语法、CONVERT → CAST、WITH ROLLUP、布尔常量等改写;跨方言族的过程化正文与无法保证等价的写法改为明确阻断并提示 DDL 覆盖,不再生成可能执行但结果错误的 SQL。 - 建表字段方言替换:DECIMAL / NUMERIC 自增列按精度提升为整数类型(PG 用 SERIAL);
DATE当前时间默认、MySQL 零日期、SQL Server 高精度时间默认函数按目标库规则改写。 - DB2 数据同步失败(SQL0418 / SQLSTATE=42610):MERGE 的无类型参数标记在 ON / UPDATE / INSERT 三处分别解析、类型不一致时被 DB2 拒绝;现按目标列声明统一加 CAST 固定类型,全量、增量与 CDC 均生效。
- 千万级大表首次全量反复重试无法完成:源表持续增长时每次重试都按当前主键范围重新切分并行区间,与上次的检查点对不上而整表重载;现按已记录的区间续跑,新增行只在尾部追加,改并行度也不再重来。
- capped 集合有序插入丢批:MongoDB → MongoDB 在 APPEND 模式下遇到重复
_id会中止整批,失败位置之后的文档既未写入也不计入重复,而行数校验仍会通过;现从失败位置继续有序重试,保留插入顺序并跳过重复文档。 - 手工内容校验偶发 500:读取表结构或连接池抛
RuntimeException时异常直接冒到控制器;现与SQLException一样落到 200 + ERROR 结果,符合接口约定。 - 诊断包配置缺项:
config/sync-settings.json补上 v1.12.0 新增的内容校验五项配置,排障时能看出相应行为差异。 - TIME 精度截断:MySQL 目标的 TIME 改为
TIME(6),源端 PostgreSQL / SQL Server / MySQL 的小数秒不再在每一行被静默截断;建表与CAST同步保留精度。 - PostgreSQL 时间游标轮询卡死:带小数秒的 TIME 游标占位符改为按 JDBC 类型加
::time/::timestamptz等转换,避免 pgjdbc 绑成 VARCHAR 后比较报错——此前该表每个周期都失败、水位永远推进不了。全量播种、增量窗口、键集分页、抽样边界与行数审计全部接入。 - 跨方言转换补充:二参
EOMONTH的月份偏移、DB2LEN → LENGTH、MySQLLENGTH/CHAR_LENGTH的字节与字符语义;MySQL 无符号整型在非 MySQL 目标按位宽扩大一档,MySQL 系目标保留原生UNSIGNED,避免插入溢出。
无破坏性变更,替换 jync.jar 重启即可;升级前备份 ./data 与 application.yml。