Oracle 数据库提供了两种数据导出/导入工具:传统的 exp/imp(Export/Import)和高效的 expdp/impdp(Data Pump)。以下是它们的详细解析、参数说明及使用场景对比。
一、传统工具:exp/imp
1. 基本功能
- exp:将数据库对象(表、索引、存储过程等)导出为二进制文件(
.dmp)。 - imp:将导出的
.dmp文件导入到数据库中。 - 特点:适用于小数据量,简单操作,但性能较低,不支持并行处理。
2. 常用参数说明
exp 导出参数
| 参数 | 说明 |
|---|---|
FULL=Y |
导出整个数据库(需权限)。 |
OWNER=user1 |
导出指定用户的所有对象。 |
TABLES=table1 |
导出指定表(可多表:TABLES=table1,table2)。 |
FILE=exp.dmp |
指定导出文件名。 |
ROWS=Y |
导出数据(默认);ROWS=N 仅导出表结构。 |
COMPRESS=Y |
压缩存储(仅表结构,不影响数据)。 |
LOG=exp.log |
指定导出日志文件。 |
示例:
exp system/password@orcl FILE=/data/exp.dmp OWNER=scott LOG=exp.log
imp 导入参数
| 参数 | 说明 |
|---|---|
FULL=Y |
导入整个数据库。 |
FROMUSER=scott |
指定导出文件的源用户。 |
TOUSER=new_user |
将对象导入到新用户。 |
TABLES=table1 |
导入指定表。 |
FILE=exp.dmp |
指定导入文件名。 |
IGNORE=Y |
忽略创建错误(如表已存在)。 |
LOG=imp.log |
指定导入日志文件。 |
示例:
imp system/password@orcl FILE=/data/exp.dmp FROMUSER=scott TOUSER=hr IGNORE=Y
二、高效工具:expdp/impdp(Data Pump)
1. 基本功能
- expdp:基于服务器端的并行导出工具,生成
.dmp文件,支持大文件、并行操作和元数据过滤。 - impdp:并行导入工具,支持灵活的数据映射和转换。
- 特点:
- 性能高(支持并行处理)。
- 支持压缩、加密、网络直接传输。
- 依赖数据库目录对象(
DIRECTORY)存储文件。
2. 核心参数说明
expdp 导出参数
| 参数 | 说明 |
|---|---|
DIRECTORY=DATA_PUMP_DIR |
指定导出文件存放的目录对象(需提前创建)。 |
DUMPFILE=expdp.dmp |
导出文件名(可多文件:DUMPFILE=expdp_%U.dmp,%U表示自动编号)。 |
SCHEMAS=scott |
导出指定用户的所有对象。 |
TABLES=table1 |
导出指定表。 |
FULL=Y |
导出全库。 |
PARALLEL=4 |
并行进程数(提升导出速度)。 |
COMPRESSION=ALL |
压缩数据(支持 METADATA_ONLY、DATA_ONLY、ALL)。 |
EXCLUDE=TABLE:"IN ('TEMP')" |
排除指定对象(支持正则表达式)。 |
LOGFILE=expdp.log |
指定日志文件。 |
示例:
expdp system/password@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp.dmp SCHEMAS=scott PARALLEL=4
impdp 导入参数
| 参数 | 说明 |
|---|---|
DIRECTORY=DATA_PUMP_DIR |
指定导入文件的目录对象。 |
DUMPFILE=expdp.dmp |
导入文件名。 |
REMAP_SCHEMA=scott:hr |
将对象从用户 scott 映射到 hr。 |
REMAP_TABLESPACE=old_ts:new_ts |
将表空间从 old_ts 映射到 new_ts。 |
TABLE_EXISTS_ACTION=REPLACE |
表存在时的处理方式(SKIP, APPEND, TRUNCATE, REPLACE)。 |
TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y |
禁用归档日志(加速导入)。 |
示例:
impdp system/password@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp.dmp REMAP_SCHEMA=scott:hr
三、exp/imp 与 expdp/impdp 对比
| 特性 | exp/imp | expdp/impdp |
|---|---|---|
| 性能 | 单线程,速度较慢。 | 并行处理,性能高。 |
| 存储位置 | 客户端生成文件。 | 服务器端目录对象(需 DIRECTORY)。 |
| 压缩与加密 | 不支持。 | 支持压缩(COMPRESSION)、加密(ENCRYPTION)。 |
| 元数据过滤 | 有限(仅 EXCLUDE/INCLUDE)。 |
强大的元数据过滤(如 EXCLUDE=TABLE)。 |
| 网络传输 | 不支持。 | 支持直接导入到远程数据库(NETWORK_LINK)。 |
| 依赖关系 | 依赖客户端安装。 | 完全基于服务器端。 |
四、关键注意事项
-
目录对象权限Data Pump 需要操作系统的目录权限和数据库目录对象的读写权限:
CREATE DIRECTORY DATA_PUMP_DIR AS '/data/pump'; GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO system; -
版本兼容性
- Data Pump 仅支持 Oracle 10g 及以上版本。
- 导出文件默认不兼容低版本(可通过
VERSION参数指定兼容性)。
-
字符集问题导出/导入时需确保源库和目标库字符集一致,否则可能乱码。
-
大文件处理
Data Pump 支持分片导出(FILESIZE)和并行处理(PARALLEL)。
五、总结
- exp/imp:适合小数据量、简单场景,无需额外配置。
- expdp/impdp:推荐用于大数据量、高性能需求,支持压缩、并行和元数据过滤。
- 选择建议:优先使用 Data Pump(expdp/impdp),尤其是生产环境。
示例命令对比:
# 传统导出
exp system/password@orcl FILE=exp.dmp OWNER=scott
# Data Pump 导出
expdp system/password@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp.dmp SCHEMAS=scott PARALLEL=4
通过合理选择工具和参数,可以显著提升数据迁移效率并减少运维成本。
评论区