第一篇《Oracle 数据泵全解析:高效数据导出与导入》(Data Pump)
《Oracle 数据迁移与备份系列》
第一篇:《Oracle 数据泵全解析:高效数据导出与导入》(Data Pump)
oracle数据泵(Data Pump)是一个用于数据库数据导入导出的工具,由oracle自带,操作比较简单。
此方法适用于数据的逻辑备份和跨版本迁移。
基础
核心组件
-  
expdp:导出工具(Data Pump Export)。用于将数据从 Oracle 数据库导出到.dmp文件中。 -  
impdp:导入工具(Data Pump Import)。用于从.dmp文件导入数据到数据库。 
实战
数据导出(Export)
1.事前准备
创建目录对象(Directory)
CREATE  DIRECTORY 目录对象名称 AS '操作系统目录路径';
 
赋予权限
在创建过文件后,用户一般不能直接使用,要为其赋予读写权限。
GRANT read, write ON DIRECTORY 目录对象名称 TO 用户名称;
 
2.执行导出命令(expdp)
expdp 用户名/密码@数据库服务名 参数1=值1 参数2=值2 ...
 
常规参数
| 常规参数 | 说明 | |
|---|---|---|
用户名/密码 | 需要导出数据的数据库用户 | 必写 | 
@数据库服务名 | 连接到的 Oracle 数据库 | 必写 | 
directory=目录对象名 | 指定数据泵目录(如 DATA_PUMP_DIR) | 必写 | 
dumpfile=文件名.dmp | 导出数据文件的名称 | 必写 | 
logfile=日志文件.log | 记录导出过程的日志文件 | 必写 | 
| 其他参数 | 可选,用于控制导出内容 | 
特殊参数与场景
1.全库导出
expdp 用户名/密码@数据库 full=y directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log
 
-  
参数:
full=y -  
**作用:**导出整个数据库。
 
2.按模式(用户)导出
expdp 用户名/密码@数据库 schemas=用户1 directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log
 
- 参数:
schemas=用户1 - 作用: 仅导出 
用户1用户下的所有对象。 
3.按表导出
expdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log
 
-  
tables=表1仅导出 表1。 -  
tables=表1,表2...可导出多个表。 
4.按条件导出
expdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=文件名.dmp logfile=日志文件.log query="WHERE id=10"
 
-  
参数:
query="WHERE id=10" -  
作用: 仅导出
id=10的数据。 -  
注意:
query必须在tables参数后面。 
数据导入(Impdp)
1.事前准备
确保dump文件的存在
 
数据导入的基础就是拥有数据导出产生的dump文件。
创建目录对象(Directory)
CREATE DIRECTORY 目录对象名称 AS '操作系统目录路径';
 
赋予权限
在创建过文件后,用户一般不能直接使用,要为其赋予读写权限。
GRANT read, write ON DIRECTORY 目录对象名称 TO 用户名称;
 
其他准备
-  
若导入用户与原用户不同,需提前创建目标用户并授权:
CREATE USER 新用户 IDENTIFIED BY 密码; GRANT CONNECT, RESOURCE TO 新用户; -  
检查目标库字符集是否与导出文件兼容:
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%'; 
2.执行导入命令(Impdp)
impdp 用户名/密码@数据库服务名 参数1=值1 参数2=值2 ...
 
常规参数
| 参数 | 说明 | |
|---|---|---|
用户名/密码 | 目标库用户(需有 IMP_FULL_DATABASE 权限处理全库导入) | 必写 | 
@数据库服务名 | 目标 Oracle 数据库实例 | 必写 | 
directory=目录对象名 | 存放导出文件的目录(需与导出时一致,如 DATA_PUMP_DIR) | 必写 | 
dumpfile=文件名.dmp | 导出文件的名称(支持通配符 %U 多文件导入) | 必写 | 
logfile=日志文件.log | 记录导入过程的日志文件 | 必写 | 
table_exists_action | 表已存在时的处理方式(SKIP、APPEND、TRUNCATE、REPLACE) | 
特殊参数与场景
1. 全库导入
impdp 用户名/密码@数据库 full=y directory=目录对象名 dumpfile=full_db.dmp logfile=imp_full.log
 
- 参数:
full=y - 要求:用户需有 
IMP_FULL_DATABASE权限。 - 注意:目标库需与源库字符集兼容。
 
2. 按模式(用户)导入
-  
导入到同名用户:
impdp 用户名/密码@数据库 schemas=用户1 directory=目录对象名 dumpfile=user1.dmp logfile=imp_user1.log -  
跨用户导入(映射用户):
impdp 用户名/密码@数据库 directory=目录对象名 dumpfile=user1.dmp remap_schema=用户1:用户2 logfile=imp_user2.logremap_schema=原用户:目标用户:将数据从用户1映射到用户2。
 
3. 按表导入
impdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=tables.dmp logfile=imp_tables.log
 
- 支持多表:
tables=表1,表2,表3 - 处理表冲突:添加 
table_exists_action=replace覆盖原表。 
4. 按条件导入
impdp 用户名/密码@数据库 tables=表1 directory=目录对象名 dumpfile=data.dmp query=表1:"WHERE id=10" logfile=imp_filter.log
 
- 用途:仅导入 
表1中id=10的数据。 - 注意:表必须已存在,否则需先导入表结构(使用 
CONTENT=METADATA_ONLY)。 
