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

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

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


1. 概述

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

工具版本性能特性
exp/imp7.3+传统工具
Data Pump (expdp/impdp)10g+现代工具

2. 工具对比

2.1 性能对比

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

2.2 功能对比

功能exp/impData Pump
表/模式/全库
表空间
压缩
加密
并行
条件导出QUERYQUERY
排除对象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 参数

参数说明
FILEdump 文件
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