Skip to content

Jync v1.7.6

Choose a tag to compare

@vfaner vfaner released this 20 Oct 03:29
· 428 commits to main since this release

Jync v1.7.6

首次全量同步大幅提速;新增只读数据预览、项目克隆与列清洗规则;修复 Oracle 11g / GBK 与若干同步正确性问题。

性能

  • 全量分块并行:默认 2 路并行(上限 8,按连接池自动收敛),可按项目覆盖;仅单列整数主键表启用。
  • 断点续跑:keyset 分页 + 分块检查点,中断、重启后从已完成的分块继续,检查点绑定区间边界,并行度或数据边界变化时自动作废重来。
  • 更大的全量批次:全量专用 full-load-batch-size / full-load-fetch-size 默认 2000;增量与 CDC 回放不受影响。
  • Oracle 空目标 INSERT 优先:首次全量写入空表改用 INSERT,500k 行基准约为 MERGE 的 2.3 倍;非空目标仍用 MERGE。
  • 新建表索引后建:非唯一二级索引等到首次全量提交后再创建,500k 行 Oracle 基准端到端快约 42%;主键与唯一索引仍立即创建,纯结构同步行为不变。
  • MySQL / TiDB 批量写入:连接串开启 rewriteBatchedStatements,executeBatch 由逐条往返变为单包发送,首次全量不再被网络延迟封顶。
  • 吞吐日志:每个分块输出行/秒、读/写/提交三段耗时占比与批量形态;commit% 偏高说明目标库提交慢(redo、Data Guard 等),加大 full-load-batch-size 减少提交次数即可。
  • 相关配置:full-load-parallelism、full-load-batch-size、full-load-fetch-size、oracle-initial-load-insert-first、defer-secondary-indexes,老项目按默认值自动生效。

新功能

  • 只读数据预览:详情页查看源库或目标表内容,最多 100 行、单元格超 500 字符截断,仅管理员可用,不提供写入、筛选、排序或导出。
  • 项目克隆:复制同步设置,不带游标、检查点与 CDC 位点;目标库需重选,「首次加载前截断」强制关闭。
  • 列清洗规则:写入前按表按列执行去首尾空白、大小写转换、空白转 NULL、去前后缀、正则替换七种固定操作;轮询与日志 CDC 两条写入路径均生效。
  • 全不选即不同步:取消全部表/视图/存储过程即表示该类别不同步,不再回退为全选。
  • 空配置禁止启动:无对象,或轮询/全量比对下同步选项全关时,前后端均拒绝启动并说明原因;CDC 不受影响。
  • CDC 下隐藏轮询开关:日志 CDC 模式隐藏不参与增量流的五个同步选项并给出说明,已保存的值原样保留。
  • 版本更新提示:管理员打开任意页面自动检查一次(GitHub 优先,超时无结果再查 Gitee,都失败则静默),有更高版本时「系统信息」导航项右上角显示黄色提醒圆点;进入系统信息页强制复查,其余页面复用本次会话的结果。
  • 下次自动运行:项目详情页显示下一次调度时间与服务器时区;项目未启动时直接提示「未启动(启动后才会按调度运行)」,不用等到时间过了才发现没跑。
  • 在线升级体验:下载进度显示百分比与已下载大小(源站不返回文件大小时取响应长度,仍未知则显示不确定态进度条);重启后自动探测服务恢复,弹出「更新成功」提示后自动刷新页面,2 分钟仍未恢复则改为提示手动刷新。

修复

  • Oracle 11g LogMiner:按服务端版本读取 V$LOGMNR_CONTENTS,不再引用 11g 不存在的 SRC_CON_ID。
  • GBK 等字符集:内置 orai18n,修复对象列表为空与字符集转换失败。
  • LogMiner 权限探测:补 SELECT ANY TRANSACTION 检查并给出授权语句;重复日志按线程号 + 日志序列号判重,修复 ORA-01289。
  • 并行全量:停止请求可传播到 worker 并等待其退出;截断或重置进度后不再复用旧分块检查点。
  • 分页兼容:DB2 改用 FETCH FIRST;SQL Server 首屏改用 TOP,修复 2008/R2 上 OFFSET/FETCH 语法错误(CDC 仍需 2012+)。
  • 列清洗:不再改写分块边界;保存时校验正则与替换串,非法规则当场拒绝。
  • 克隆与预览:克隆的项目与同步设置同事务提交;预览仅限管理员,网络失败有明确提示。
  • 在线升级:修复 fat jar 运行时把 jar: 嵌套类路径误判为「非可执行 jar」、一律提示无法在线升级的问题。
  • 表注释与列注释同步:读取 Oracle ALL_TAB_COMMENTS / ALL_COL_COMMENTS,新建表随 DDL 带上注释;已有表的注释变更通过 ALTER TABLE ... COMMENT= 与 MODIFY COLUMN 更新。源端一部分列没有注释属正常情况,不会报错;注释更新失败只记警告,不阻塞数据同步。
  • Oracle 宽表同步到 MySQL:业务列上百、总行宽超过 InnoDB 65535 字节限制时,按整表行宽预算把放不下的列瘦身为 LONGTEXT,唯一索引列最后才动,优先保证数据能落库;新增列与修改列沿用同一方案,不再报 1118。瘦身后的 TEXT 列不再携带目标库拒绝的 DEFAULT(1101)。
  • 自定义 Cron 到点不生效:错过的触发(线程池忙、调度暂停打满宽限期)恢复后补跑一次,不再被静默丢弃;启动与保存时校验 Cron,调度日志记录下次触发时间与时区;每轮定时任务输出 INFO 日志(项目、开始、结束、用时)。程序停机期间错过的触发不补跑,但游标未推进,下一次触发会把停机期间的变更一并同步。

测试

  • 1643 个测试:1642 通过,1 个按环境条件跳过;*IT 需 Docker 另跑。

升级

  • 替换 jync.jar 重启即可,表结构随 ddl-auto: update 自动演进;升级前备份 ./data。
  • 停机期间的源库变更会在重启后自动补齐。
  • 容器部署将镜像 tag 更新为 jync:1.7.6(Docker Compose 与 deploy/k8s/ 清单已同步)。