DMP(Data Pump Dump File)
是Oracle数据库专用的二进制格式文件,由expdp/impdp
或旧版exp/imp
工具生成。它包含数据库对象的元数据(表结构、索引等)和实际数据,是数据备份、迁移和恢复的核心载体。
expdp system/password@ORCL directory=DATA_PUMP_DIR
dumpfile=20250520_full.dmp logfile=export.log
schemas=HR,SCOTT
parallel=4
compression=all
encryption=password:oracle123
关键参数:
select * from dba_directories;
create directory testdir as 'D:\OracleDMP';
SQL> grant read,write on directory testdir to TEST_FORMAL;
--导出指定表 USER_TEMP,USER_TEMP2
expdp TEST_FORMAL/MyPassword@ORCL directory=testdir dumpfile=test.dmp logfile=exp.log tables=USER_TEMP,USER_TEMP2
-- 导出整库
expdp TEST_FORMAL/MyPassword@ORCL directory=testdir dumpfile=test.dmp logfile=exp.log
语法
exp system/password@ORCL file=/backup/legacy.dmp
owner=HR
buffer=102400
rows=y
consistent=y
log= /backup/exp.log
示例:
--导出指定表 USER_TEMP,USER_TEMP2
exp TEST_FORMAL/MyPassword@ORCL file=D:\OracleDMP\test.dmp tables=(USER_TEMP,USER_TEMP2) log=D:\OracleDMP\exp.log
--导出整库
exp TEST_FORMAL/MyPassword@ORCL file=D:\OracleDMP\test.dmp log=D:\OracleDMP\exp.log
适用场景:低版本数据库或简单备份需求。
impdp system/password@NEWDB directory=DATA_PUMP_DIR
dumpfile=20250520_full.dmp
remap_schema=HR:NEW_HR
remap_tablespace=USERS:NEW_USERS
transform=segment_attributes:n
exclude=statistics
关键参数:
预先创建的Oracle目录对象
(需关联物理路径)。imp system/password@NEWDB file=/backup/legacy.dmp
fromuser=HR touser=NEW_HR
ignore=y
commit=y
注意事项:需手动创建目标用户和表空间。
参数 | 作用说明 | 示例 |
---|---|---|
USERID |
指定数据库连接凭证(格式:用户名/密码@服务名 ) |
USERID=system/oracle@ORCL |
FILE |
指定要导入的DMP文件路径 | FILE=/data/full.dmp |
FULL |
全库导入(需IMP_FULL_DATABASE 权限) |
FULL=Y |
FROMUSER/TOUSER |
用户重定向(将原用户数据导入目标用户) | FROMUSER=HR TOUSER=NEW_HR |
TABLES |
指定导入的表(支持多表或分区表) | TABLES=(EMP,DEPT) 或 TABLES=(T1:P1,T1:P2) |
ROWS |
是否导入数据行(默认Y 导入数据,N 仅导入结构) |
ROWS=N (仅导入DDL) |
IGNORE |
忽略对象创建错误(如重复表/索引,默认N 报错) |
IGNORE=Y (跳过冲突继续执行) |
COMMIT |
提交频率(默认N 批量提交,Y 逐行提交) |
COMMIT=Y (适用于大事务回滚控制) |
LOG |
指定日志文件路径 | LOG=/logs/imp.log |
INDEXFILE |
将DDL语句写入指定文件(用于调试) | INDEXFILE=ddl.sql |
参数 | 适用场景 |
---|---|
DESTROY=Y | 覆盖已有表空间文件(慎用) |
GRANTS=N | 跳过权限导入(如仅需数据) |
RECORDLENGTH=65535 | 调整I/O缓冲区大小(优化大数据量导入性能) |
PARFILE | 从参数文件读取配置(简化复杂命令) |
定义:导入整个DMP文件中的所有对象(用户、表、索引等)。
命令示例:
imp system/oracle@ORCL FILE=full.dmp FULL=Y IGNORE=Y LOG=imp_full.log
适用场景:数据库整体迁移或灾难恢复。
注意事项:
需提前创建目标库的表空间和用户
目标库字符集
必须与DMP文件一致(通过NLS_LANG
环境变量控制)
定义:将指定用户的数据导入到另一用户(支持跨用户映射)。
命令示例:
imp system/oracle@ORCL FILE=hr.dmp FROMUSER=HR TOUSER=NEW_HR LOG=imp_hr.log
适用场景:用户数据迁移或测试环境克隆。
注意事项:
目标用户需提前创建
并分配权限
若表空间不同需配合REMAP_TABLESPACE(仅数据泵支持,传统IMP需手动处理)
定义:选择性导入特定表或分区。
命令示例:
imp scott/tiger@ORCL FILE=emp.dmp TABLES=(EMP,DEPT) IGNORE=Y LOG=imp_tables.log
适用场景:局部数据恢复或表结构同步。
注意事项:
支持通配符%(如TABLES=(EMP%)导入EMP开头的表)
分区表需指定分区名(如TABLES=(SALES:Q1_2025))5
并行处理:parallel=8(建议不超过CPU核心数)。
网络压缩:network_link=… compression=data(远程同步)。
分段导出:按表分区或日期范围分批操作。
策略选择:
代码示例:
expdp system/password@ORCL directory=dpump_dir
dumpfile=incr_%U.dmp
schemas=HR
content=data_only
query="WHERE update_time>SYSDATE-1"
Oracle 中 因为版本问题或命令问题处理时,我们要 查看原始 导出日志文件,当使用的是 exp 模式导出的数据,应当用 imp 模式导入;
导出日志文件一般格式如下 ,例如 a.log:
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Tes
Export done in UTF8 character set and UTF8 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
About to export specified tables via Conventional Path ...
Current user changed to SYSTEM
. . exporting table USER_EXPORT 19138328 rows exported
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
Export terminated successfully with warnings.
从日志文件我们可以分析出,
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
character 为 AL32UTF8
EXP
USER_EXPORT
SYSTEM
导入数据时,必须保证两个平台的 字符集一致,若不一致,会导致出现导入失败问题,解决方法为
设置 Oracle 环境变量的方式解决,具体可以参考博文 Oracle 字符集简介及修改操作实战