一、 导出/入前检查
查看用户默认表空间
select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where USERNAME='USER_NAME';
查看表空间对应数据文件
select tablespace_name,file_name from dba_data_files where tablespace_name='TBSNAME';
查询目录实际路径
select OWNER,DIRECTORY_PATH from dba_directories where DIRECTORY_NAME='DATA_PUMP_DIR';
目录属主授权
grant read,write on directory DATA_PUMP_DIR to system;
或者system用户登录创建目录
alter user system identified by "xxxxx";
create or replace directory DATA_PUMP as '/data/tmp';
二、 导出数据
1. 常用选项
- 排除指定表 EXCLUDE=
- 导出指定表 tables=
- 导出表名带关键字的表 INCLUDE=TABLE:\"LIKE \'%BAK%\'\"
- 只导表结构 CONTENT=METADATA_ONLY
- 只导表数据 CONTENT=data_only
- 输出日志 logfile=expdp1026.log
- 指定并行度 PARALLEL=4
- 压缩 compression=all (测试压缩比约为8:1,但对导出性能有影响)
- 指定版本(高版本导至低版本) version=12.1.0.2.0
2. 导出例子
导出指定用户所有数据
expdp system DIRECTORY=DATA_PUMP schemas=USER_NAME dumpfile=USER_NAME1025.dmp logfile=USER_NAME1025.log
导出指定用户所有数据(排除 IM_HIS 和 IM_OR_HIS表)
expdp system@mydb schemas=user_name dumpfile=user_name.dump DIRECTORY=DATA_PUMP_DIR EXCLUDE=TABLE:\"IN\(\'IM_HIS\',\'IM_OR_HIS\'\)\"
导出用户指定表
expdp system DIRECTORY=DATA_PUMP tables=USER_NAME.t1,USER_NAME.t2,USER_NAME.t3 dumpfile=USER_NAME1206.dmp
导出用户下表名带指定关键字的表
expdp system DIRECTORY=DATA_PUMP schemas=USER_NAME INCLUDE=TABLE:\"LIKE \'%BAK%\'\" dumpfile=USER_NAME1206.dmp logfile=USER_NAME1206.log
高版本导入12.1.0.2版本数据
expdp system@orcl_dev schemas=user1,user2 dumpfile=orcl.dump version=12.1.0.2.0 DIRECTORY=DATA_PUMP_DIR;
只导出用户元数据,且不包含统计信息
expdp system directory=jy schemas=scott content=metadata_only exclude=statistics dumpfile=scott_meta.dmp logfile=scott_meta.log
三、 导入数据
0. 注意事项
- 注意先检查目标表空间是否存在
- 检查目标磁盘空间及表空间大小
- 导入时注意检查DB等待事件及alert log,出现异常时及时处理
1. 常用选项
- 导入新用户下 REMAP_SCHEMA=old:new
- 导入新表空间下 remap_tablespace=old:new
- 导入时重命名表 REMAP_TABLE=scott.T_OLD:T_NEW
- 只导表结构 CONTENT=METADATA_ONLY
- 指定并行度 PARALLEL=4
- 目标库与源库相同 transform=oid:n
- 将dmp文件转为sql语句(不真正导入)sqlfile=xxx.sql
- 指定表已存在时动作 table_exists_action
table_exists_action的值如下:
- 不指定:表已存在会报错
- skip:跳过已存在表并处理下一个对象(不安全,谨慎使用)
- append:为表追加数据(不安全,谨慎使用)
- truncate:截断已存在表然后插入新数据(不安全,谨慎使用)
- replace:删除已存在表,重建并插入数据(不安全,谨慎使用)
2. 导入例子
导入前准备(可选)
create tablespace tbs datafile size 2g autoextend on next 100m maxsize 30g;
create role role_user;
grant CREATE JOB,CREATE MATERIALIZED VIEW,CREATE PUBLIC DATABASE LINK,CREATE PUBLIC SYNONYM,CREATE VIEW,ALTER SESSION to role_user;
create user USER_NAME identified by "xxxx";
ALTER USER USER_NAME QUOTA UNLIMITED ON tbs;
grant role_user,connect,resource to USER_NAME;
alter user USER_NAME default tablespace tbs;
--drop tablespace tbs including contents and datafiles;
--drop user USER_NAME cascade;
导入指定用户数据(需要与源库相同数据/temp表空间存在)
impdp system DIRECTORY=DATA_PUMP schemas=USER_NAME dumpfile=USER_NAME1025.dmp logfile=USER_NAME1025.log
导入指定用户部分表
impdp system DIRECTORY=DATA_PUMP schemas=USER_NAME tables=USER_NAME.t1,USER_NAME.t2,USER_NAME.t3 dumpfile=USER_NAME1206.dmp logfile=USER_NAME1026.log
导入到其他用户及表空间
impdp system DIRECTORY=DATA_PUMP schemas=USER_NAME dumpfile=USER_NAME1206.dmp remap_schema=USER_NAME:userbak remap_tablespace=old:new logfile=USER_NAME1026.log
导入时重命名表
impdp system/oracle directory=dump dumpfile=expdp_T_A.dmp logfile= t_a.log REMAP_TABLE=scott.T_A:EMPS
目标库与源库相同
type默认不能导入到相同的数据库中,因为type的创建SQL中包含源库oid信息,导入时会引起oid冲突,进而导致相关表不能创建。可以使用impdp的transform参数重新生成原有dmp文件中的oid映射,transform=oid:n含义为不加载oid信息而重新生成。
impdp scottback/scottback@wilson directory=my_dir dumpfile=scott.dmp logfile=resimp2.log remap_schema=scott:scottback transform=oid:n
将dmp文件转为sql语句(不真正导入)
impdp scott/tiger directory=dir_name dumpfile=myfile sqlfile=xyz.sql
四、expdp/impdp管理
交互式命令列表
Activity | Command Used |
---|---|
Exit interactive-command mode. | |
Stop the import client session, but leave the current job running. | |
Display a summary of available commands. | |
Detach all currently attached client sessions and terminate the current job. | |
Increase or decrease the number of active worker processes for the current job. This command is valid only in Oracle Database Enterprise Edition. | |
Restart a stopped job to which you are attached. | |
Display detailed status for the current job. | |
Stop the current job. |
查看dump job信息
select * from dba_datapump_jobs;
连接到现有dump job(查看dump进度)
--设置attach为job_name即可查看进度。
expdp system/oracle attach=SYS_EXPORT_SCHEMA_01
--或者
impdp system/oracle attach=SYS_EXPORT_SCHEMA_01
输出大致如下
[oracle@ocm1 ~]$ expdp system/oracle attach=SYS_EXPORT_SCHEMA_01
...
Job: SYS_EXPORT_SCHEMA_01
Owner: SYSTEM
Operation: EXPORT
Creator Privs: TRUE
GUID: 482CA277B7350F88E053479DA8C00EFB
Start Time: Friday, 10 February, 2017 20:57:05
Mode: SCHEMA
Instance: PROD1
Max Parallelism: 1
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND system/******** schemas=eoda directory=ext dumpfile=eoda.dmp
State: EXECUTING
Bytes Processed: 2,113,260,264
Percent Done: 65
Current Parallelism: 1
Job Error Count: 0
Dump File: /home/oracle/ext/eoda.dmp
bytes written: 2,113,449,984
Worker 1 Status:
Process Name: DW00
State: EXECUTING
Object Schema: EODA
Object Name: NEW_TABLE <---------
Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA <---------
Completed Objects: 3
Total Objects: 52
Completed Rows: 1,338,029 <---------
Worker Parallelism: 1
暂停dump job
执行ctrl+c
# 或者
expdp system/oracle attach=SYS_EXPORT_SCHEMA_02
Export> STOP_JOB
开始暂停的dump job
Export> START_JOB
Export> CONTINUE_CLIENT
# 重新启动暂停的dump job并跳过当前导入/出的对象
Export> START_JOB=SKIP_CURRENT=YES
终止dump job
expdp system/oracle attach=SYS_EXPORT_SCHEMA_02
Export> stop_job=immediate
# 或者
KILL_JOB
参考
Commands Available in Import's Interactive-Command Mode
https://www.cnblogs.com/huacw/p/3888807.html
https://blog.csdn.net/gxc1222/article/details/79272766/
Oracle数据泵(Data Dump)错误汇集 - 潇湘隐者 - 博客园
convert expdp dmp file to SQL DDL statements
如何清除 DBA_DATAPUMP_JOBS 视图中的异常数据泵作业?(文档 ID 1626201.1)