navicat 不支持导出 oracle 原生 .dmp 文件,其“数据泵导出”仅生成 sql 脚本;真正生成 .dmp 文件必须使用 oracle 服务端的 expdp 工具,并满足目录、权限和数据库安装三前提。
navicat 本身不支持直接导出 oracle 的 .dmp 文件。它没有内置的 expdp 功能,也不能调用 oracle 数据泵生成物理 .dmp 文件。你看到的「数据泵导出」选项,实际只是生成 sql 脚本(ddl + insert),不是 oracle 原生的二进制 .dmp。
真正能生成标准 Oracle .dmp 文件的,只有 Oracle 自带的命令行工具:expdp(Data Pump Export)。
为什么 Navicat 的「数据泵导出」不是真正的 DMP?
Navicat 的「数据泵」功能本质是图形化 SQL 导出器:
- 它导出的是可读的
.sql文件,含CREATE TABLE、INSERT INTO等语句 - 不依赖 Oracle
DIRECTORY对象,也不走 Oracle 数据泵引擎 - 无法导出存储过程、包、物化视图、ACL、审计策略等非表对象
- 导出结果不能被
impdp直接导入——impdp只认.dmp二进制文件
如果你需要和 Oracle DBA 协作、做跨版本迁移、或要求兼容 RMAN/备份体系,必须用 expdp。
必须用 expdp:在服务器上执行导出命令
导出 .dmp 文件需满足三个前提:
- Oracle 数据库服务端已安装(Navicat 在本地无用)
- 有可写入的 OS 目录(如
/u01/dump),且该路径已映射为 OracleDIRECTORY对象 - 执行用户具备
EXP_FULL_DATABASE或EXP_DATAPUMP_FULL_DATABASE角色(通常用system或sys as sysdba)
典型命令:
expdp system/orcl@orcl \ directory=DATA_PUMP_DIR \ dumpfile=backup_20260423.dmp \ logfile=backup_20260423.log \ full=y \ compression=all
注意:directory=DATA_PUMP_DIR 是 Oracle 预定义逻辑目录,对应 OS 路径由 DBA 确认;若要自定义,需先用 CREATE DIRECTORY my_dir AS '/u01/dump'; 并授权。
常见失败原因和绕过方式
执行 expdp 报错时,90% 出在权限或路径:
-
ORA-39002: invalid operation→ 检查directory名是否拼错,或该DIRECTORY是否真实存在(查SELECT * FROM dba_directories;) -
ORA-39070: Unable to open the log file→ OS 目录无写权限,或 Oracle 用户(如oracle)对该路径不可写 -
ORA-31631: privileges are required→ 当前用户没被授予READ/WRITE权限到该DIRECTORY(需 DBA 执行GRANT READ,WRITE ON DIRECTORY my_dir TO scott;) - 想导出单个用户?改用
schemas=scott;导出几张表?用tables=scott.emp,scott.dept
Navicat 能做的辅助动作
虽然不能导出 .dmp,但 Navicat 可帮你完成关键前置准备:
- 连上 Oracle 后,执行 SQL 查询
SELECT * FROM dba_directories;快速确认可用DIRECTORY - 用「查询」窗口运行
CREATE DIRECTORY和GRANT命令(需以SYSDBA角色连接) - 把导出后的
.dmp文件路径复制给运维,或通过 SFTP 上传到目标服务器对应DIRECTORY路径下 - 导入阶段,Navicat 的「数据泵导入」界面可生成
impdp命令模板(点「生成SQL」),省去手敲参数
真正执行仍需登录服务器终端运行 impdp —— 这一步无法跳过。
别指望 Navicat 替代 Oracle 数据泵。它是个好用的 GUI,但不是数据库引擎本身。导出 .dmp 的控制权永远在 Oracle 服务端,不在客户端工具手里。











