开启断点续传需启用高级模式并勾选“自定义记录集”,通过记录集生成器按主键范围分片,生成带序号的独立数据集,中断后可手动从失败序号继续;跨库迁移时须SQL预判目标库已存在表并过滤;“保持连接间隔”防服务器断链,“自动重连”仅恢复连接不续传任务;字段映射、清空数据选项、外键与索引设置三项必须手动校验。
怎么开启断点续传核心开关
navicat 本身不叫“断点续传”,它叫「自定义记录集 + 中断恢复」,关键在于传输前就启用高级模式并生成可分片的数据集。没开这个,中断后重跑默认从头开始,已导入数据可能被清空或重复插入。
- 右键选中要传输的表 → 点击
高级模式 - 在弹出窗口中勾选
自定义记录集,不要用默认的“全部记录” - 点击
记录集生成器,选择按主键(如id)范围自动切分,比如每 5 万条一组 - 确认后生成多个带序号的数据集(如
dataset_001、dataset_002),每个都是独立任务
这样哪怕第 7 个集失败,下次只需手动勾选从 dataset_007 开始,前面成功的不会动。
Oracle 转 MySQL 时怎么跳过已同步的表
跨库迁移最怕重复导入——尤其 Oracle 表多、字段长、建表慢,重复执行会卡死或报 Table 'xxx' already exists 错误。必须靠 SQL 预判哪些表已经存在。
- 先在 MySQL 目标库查已有的表:
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_db' AND TABLE_TYPE = 'BASE TABLE' - 再在 Oracle 源库过滤掉这些表:
SELECT table_name FROM all_tables WHERE owner = 'YOUR_SCHEMA' AND table_name NOT IN ('t_user', 't_order', ...) - 把第二步结果复制回 Navicat 的「高级模式」→「表过滤」里粘贴,只保留待同步的表
注意:表名大小写敏感,Oracle 默认大写,MySQL 可能小写,导出时统一转大写更稳妥。
为什么“保持连接间隔”和“自动重连”要分开配
这两个选项看着像兄弟,实际解决的是完全不同的问题:一个是防服务器主动断链(保持连接间隔),一个是补救链路意外中断(自动重连)。一起开反而容易翻车。
-
保持连接间隔建议设为60(秒),它会让 Navicat 定期发PING包,避免中间网络设备(如 NAT、防火墙)因超时回收连接 -
自动重连可以开,但必须配合脚本逻辑——比如你正在跑一个 2 小时的数据传输,中途断了,Navicat 自动连上后不会自动续传,它只会停在中断那一步,得你手动点“继续” - 如果数据库设置了
wait_timeout=60,而你又没设保持连接间隔,那哪怕网络稳如泰山,60 秒没操作也会被 MySQL 主动踢掉
所以真实场景下:先设好 保持连接间隔 防断,再开 自动重连 防抖,但别指望它帮你“自动续传任务”。
定制化规则最容易漏掉的三个配置点
很多人调完记录集就以为万事大吉,结果跑一半报错退出,回头一看是字段映射或约束没对齐。以下三点必须手动检查:
- 在「字段映射」页,确认 Oracle 的
NUMBER(10,0)是否映射为 MySQL 的BIGINT,而不是默认的DECIMAL——否则大批量导入时性能暴跌 - 关闭
删除目标表中现有数据(除非你真要全量覆盖),否则每次重试都会清空已成功导入的部分 - 勾选
忽略外键约束检查和禁用唯一索引(仅限首次全量同步),避免因顺序问题导致插入失败;同步完成后再手动重建索引
真正麻烦的不是中断本身,而是中断后你不确定哪一步生效了、哪一行卡住了、哪个约束悄悄拦了你一下——所以每次启动前,花 30 秒扫一遍这三项,比中断后查日志快得多。










