Navicat 17 Data Pump 仅支持 Oracle,非跨平台工具;其本质是封装 Oracle 原生 expdp/impdp,不兼容 MySQL/PostgreSQL/SQL Server;异构迁移应使用 Data Transfer 向导并手动配置映射与目标库环境。
Navicat 17 Data Pump 不是跨平台工具,它只支持 Oracle
很多人误以为 data pump 是通用迁移组件,其实它是 navicat premium 17 中专为 oracle 数据库设计的封装界面,底层调用的是 oracle 原生的 expdp 和 impdp。它不支持 mysql、postgresql 或 sql server 的“数据泵”式导出导入——那些数据库压根没有 expdp 这个命令。如果你在非 oracle 环境里点开“oracle data pump”菜单却连不上,不是配置错,而是功能根本不可用。
真正起效的是 Server export + secure_file_priv 配合
对 MySQL 大表迁移,Data Pump 名字会误导人,实际该用的是“数据传输”向导里的 Server export (SQL file) 模式。这个模式才能绕过本地中转,让数据全程走服务端:
- 源库执行
SELECT ... INTO OUTFILE,写入服务器磁盘(路径由secure_file_priv控制) - 目标库执行
LOAD DATA INFILE,直接从同一台服务器读取文件 - 全程不经过 Navicat 客户端内存,1000 万行表也能秒级生成 SQL 文件
前提是目标库必须允许 LOAD DATA INFILE,且 secure_file_priv 路径双方可读写(常见坑:MySQL 8.0 默认值为 NULL,需显式设为目录如 /var/lib/mysql-files/)。
Oracle 场景下 Data Pump 报错,90% 是 InstantClient 或权限问题
当你看到类似 ORA-39002: invalid operation 或 ORA-39070: Unable to open the log file,别急着重装 Navicat——先确认两件事:
-
InstantClient版本是否与 Navicat 架构匹配?32 位 Navicat 必须配 32 位oci.dll,64 位同理;PATH 环境变量必须把 InstantClient 目录放在最前 - 执行
expdp的 Oracle 用户是否具备EXP_FULL_DATABASE角色?仅CONNECT和RESOURCE不够,必须显式授权:GRANT EXP_FULL_DATABASE TO your_user;
另外注意:Navicat 的 Data Pump 界面不会告诉你 DIRECTORY 对象是否存在,而 expdp 必须指定一个已创建的 Oracle DIRECTORY(如 DATA_PUMP_DIR),否则直接报错退出。
跨异构迁移别碰 Data Pump,用 Data Transfer + 手动映射
想把 MySQL 表迁到 PostgreSQL?Data Pump 功能灰掉是正常的——它根本不参与这事。此时唯一可靠路径是“数据传输”(Data Transfer):
- 勾选
Transfer structure and data,不要点Synchronize data(后者依赖主键比对,在异构库间必然失败) - 遇到
TINYINT(1)→BOOLEAN映射出错,手动进字段映射页改成SMALLINT - 发现
UUID类型建表失败,说明目标 PostgreSQL 缺少uuid-ossp扩展,得先连进去执行CREATE EXTENSION "uuid-ossp";
Navicat 不会自动帮你装扩展、改字符集、补外键约束,这些都得提前在目标库准备好。所谓“大表迁移难题”,难点从来不在工具按钮上,而在你有没有在点“运行”前,把目标库的土壤翻好。


















