Oracle 逻辑备份 exp/imp 与 Data Pump 对比

适用版本:Oracle Database 9i / 10g / 11g / 12c / 19c
文档版本:v1.0 / 2026-07


1. 概述

Oracle 提供两代数据导出导入工具[1]:

工具 版本 性能 特性
exp/imp 7.3+ 低 传统工具
Data Pump (expdp/impdp) 10g+ 高 现代工具

2. 工具对比

2.1 性能对比

维度 exp/imp Data Pump
性能 1x 10-100x
并行 不支持 支持
Direct Path 不支持 支持
重启 不支持 支持
监控 不支持 支持
网络 不支持 支持
位置 客户端 服务端

2.2 功能对比

功能 exp/imp Data Pump
表/模式/全库 ✓ ✓
表空间 ✓ ✓
压缩 ✗ ✓
加密 ✗ ✓
并行 ✗ ✓
条件导出 QUERY QUERY
排除对象 ✗ EXCLUDE
包含对象 ✗ INCLUDE
网络导入 ✗ NETWORK_LINK
任务管理 ✗ ATTACH

3. exp/imp 使用

3.1 exp 导出

# 表导出
exp scott/tiger FILE=emp.dmp TABLES=employees

# 模式导出
exp scott/tiger FILE=scott.dmp OWNER=scott

# 全库导出
exp system/pwd FILE=full.dmp FULL=Y

# 条件导出
exp scott/tiger FILE=emp.dmp TABLES=employees QUERY=\"WHERE dept_id=10\"

# 直接路径(更快)
exp scott/tiger FILE=emp.dmp TABLES=employees DIRECT=Y

3.2 imp 导入

# 表导入
imp scott/tiger FILE=emp.dmp TABLES=employees

# 模式导入
imp scott/tiger FILE=scott.dmp FROMUSER=scott TOUSER=scott

# 全库导入
imp system/pwd FILE=full.dmp FULL=Y

# 忽略错误
imp scott/tiger FILE=emp.dmp IGNORE=Y

# 仅导入数据
imp scott/tiger FILE=emp.dmp DATAONLY=Y

3.3 exp/imp 参数

参数 说明
FILE dump 文件
TABLES 表列表
OWNER 模式
FULL 全库
QUERY 查询条件
DIRECT 直接路径
IGNORE 忽略错误
INDEXES 索引
CONSTRAINTS 约束
TRIGGERS 触发器
GRANTS 权限
STATISTICS 统计信息

4. Data Pump 使用

详细内容见:Oracle Data Pump 详解。

4.1 基本使用

# 导出
expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=emp.dmp TABLES=employees

# 导入
impdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=emp.dmp TABLES=employees

4.2 高级特性

# 并行
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full_%U.dmp FULL=Y PARALLEL=4

# 压缩
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=Y COMPRESSION=ALL

# 网络导入
impdp scott/tiger DIRECTORY=dpump_dir NETWORK_LINK=src_link TABLES=employees

5. 迁移场景对比

5.1 小数据量(< 10GB)

# exp/imp 足够
exp scott/tiger FILE=small.dmp OWNER=scott
imp scott/tiger FILE=small.dmp FROMUSER=scott TOUSER=scott

5.2 中大数据量(10GB - 1TB)

# Data Pump 推荐
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=medium_%U.dmp SCHEMAS=scott PARALLEL=4
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=medium_%U.dmp SCHEMAS=scott PARALLEL=4

5.3 海量数据(> 1TB)

# Data Pump + 并行 + 压缩
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=large_%U.dmp FULL=Y PARALLEL=8 COMPRESSION=ALL

# 或使用 TTS
# 详见 Oracle 跨平台迁移与 TTS

6. 字符集处理

6.1 字符集问题

# exp/imp 字符集转换
# NLS_LANG 必须与源库一致
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

exp scott/tiger FILE=emp.dmp TABLES=employees

6.2 Data Pump 字符集

# Data Pump 自动处理字符集
# 无需特殊设置

7. 版本兼容

7.1 exp/imp 版本规则

  • 使用低版本导出,高版本导入
  • 高版本导出可能不被低版本识别

7.2 Data Pump 版本

# 指定版本
expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=emp.dmp TABLES=employees VERSION=11.2

8. 监控

8.1 exp/imp 监控

# 仅能查看日志
tail -f export.log

8.2 Data Pump 监控

-- 查看任务
SELECT owner_name, job_name, operation, state, degree 
FROM dba_datapump_jobs;

-- 进度
SELECT sid, opname, sofar, totalwork 
FROM v$session_longops 
WHERE opname LIKE '%Data Pump%';

9. 常见坑与排错

9.1 exp/imp 慢

修复:

# 1. 使用 DIRECT=Y
exp scott/tiger FILE=emp.dmp TABLES=employees DIRECT=Y

# 2. 增大 BUFFER
exp scott/tiger FILE=emp.dmp BUFFER=10485760

# 3. 改用 Data Pump

9.2 字符集乱码

修复:

# 1. 检查源库字符集
SELECT value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';

# 2. 设置 NLS_LANG
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

# 3. 重新导出导入

9.3 Data Pump 空间不足

修复:

-- 1. 检查目录空间
! df -h /u01/dpump

-- 2. 清理旧文件
! rm /u01/dpump/old_*.dmp

-- 3. 添加空间

9.4 ORA-31626: 任务不存在

修复:

-- 清理 Data Pump 主表
SELECT * FROM dba_datapump_jobs;

DROP TABLE system.<job_name>;

10. 最佳实践

  1. 优先使用 Data Pump:性能与功能更优
  2. exp/imp 仅兼容场景:旧版本数据库
  3. 大数据量用并行:PARALLEL=4+
  4. 压缩节省空间:COMPRESSION=ALL
  5. 监控任务进度:dba_datapump_jobs
  6. 字符集一致:NLS_LANG
  7. 目录权限:READ/WRITE
  8. 网络导入:NETWORK_LINK
  9. 参数文件:复杂场景
  10. 测试验证:导入后检查

11. 参考资料

[1] Oracle Database Utilities 19c, “Original Export and Import”
https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-original-export-and-import.html

[2] Oracle Database Utilities 19c, “Data Pump”
https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump.html