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