Navicat Premium 16 无法直接执行 DMP 文件导入,实际依赖 Oracle 服务端 impdp 工具;常见报错 ORA-39002 源于目录对象缺失、权限不足、DMP 版本不兼容或文件未放至服务器指定路径。
navicat premium 16 不能直接“执行” dmp 文件导入,它只是调用 oracle 服务端的 impdp 工具——所以真正起作用的是你连接的那台 oracle 数据库服务器,不是 navicat 本身。
为什么点「数据泵导入」后没反应或报错 ORA-39002?
这是最常见卡点:Navicat 的「数据泵导入」功能本质是拼接并提交 impdp 命令给 Oracle 实例执行,但它不帮你解决底层依赖。出错通常因为:
-
directory参数指向的 Oracle 目录对象(如DATA_PUMP_DIR)不存在,或对应 OS 路径不可读 - 当前登录用户(比如
system)没有IMP_FULL_DATABASE或DATAPUMP_IMP_FULL_DATABASE角色权限 - DMP 文件版本高于目标库版本(例如用 19c 导出的 .dmp 导入到 11g),
impdp会直接拒绝 - DMP 文件放在本地电脑,但 Navicat 尝试让远程 Oracle 服务器去读取——路径根本不存在于服务器上
必须提前在 Oracle 服务端确认三件事
别跳过这步,否则后续所有操作都是白忙:
- 查目录:在 Navicat 中执行
SELECT * FROM dba_directories;,确认你要用的目录名(如DATA_PUMP_DIR)存在,且DIRECTORY_PATH列显示的是服务器上的绝对路径(如/u01/app/oracle/admin/orcl/dpdump/) - 放文件:把你的
xxx.dmp文件手动上传/复制到上面查出的那个服务器路径下(不是你本地电脑) - 验权限:执行
SELECT * FROM session_privs WHERE privilege LIKE '%IMP%';,确保结果里有IMP_FULL_DATABASE;如果没有,需用sys as sysdba执行GRANT IMP_FULL_DATABASE TO your_user;
Navicat 16 中实际导入操作要点
确认上一步全部满足后,再进图形界面:
- 连接时务必勾选「高级」→「以 SYSDBA 身份连接」,否则多数权限检查会失败
- 菜单栏:【工具】→【数据泵】→【数据泵导入】
- 「转储文件」页:点击「添加」,这里填的不是本地路径,而是 DMP 文件在服务器上的**文件名**(如
backup_20260423.dmp),Navicat 会自动拼进dumpfile=参数 - 「选项」页:
Directory object下拉必须选中你前面查到的那个有效目录名(如DATA_PUMP_DIR),不能手输 - 首次导入建议勾选「跳过已存在对象」,避免因表已存在报错中断;若要清空重导,改选「截断表」或先手动
DROP USER ... CASCADE - 点「生成 SQL」看看 Navicat 拼出来的命令长啥样,典型形如:
impdp system/xxx@orcl directory=DATA_PUMP_DIR dumpfile=backup.dmp full=y logfile=import.log
导入失败时最该看的日志位置
Navicat 界面底部的「导入日志」只显示前端交互,关键错误藏在 Oracle 服务端日志里:
- 日志文件默认生成在刚才
dba_directories查出的同一服务器路径下,文件名是你在「选项」页指定的logfile值(如import.log) - 如果没指定
logfile,Oracle 会写到DATA_PUMP_DIR对应路径下的默认名,比如import_SOMETHING.log - 真遇到
ORA-39001、ORA-39000这类错误,直接 SSH 登服务器,cat /u01/.../import.log—— 90% 的问题答案都在那里,而不是反复重试 Navicat 界面
真正决定 DMP 能否导入成功的,从来不是 Navicat 版本号,而是你有没有把文件放到 Oracle 服务器磁盘上、目录对象是否映射正确、以及用户权限是否到位。图形界面只是个命令行包装器,别把它当黑盒。


















