oracle 数据泵导入导出 expdp/impdp

本文详述Oracle数据泵导出导入流程,包括前检查步骤、导出与导入命令选项、管理命令及常见问题解决,适用于Oracle数据库管理员及开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 导出/入前检查

查看用户默认表空间

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管理

交互式命令列表

ActivityCommand Used

Exit interactive-command mode.

CONTINUE_CLIENT

Stop the import client session, but leave the current job running.

EXIT_CLIENT

Display a summary of available commands.

HELP

Detach all currently attached client sessions and terminate the current job.

KILL_JOB

Increase or decrease the number of active worker processes for the current job. This command is valid only in Oracle Database Enterprise Edition.

PARALLEL

Restart a stopped job to which you are attached.

START_JOB

Display detailed status for the current job.

STATUS

Stop the current job.

STOP_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/

Kill, cancel, resume or restart datapump expdp and impdp jobs (ORA-31626, ORA-31633, ORA-06512, ORA-00955) - Oracle 48

Oracle数据泵(Data Dump)错误汇集 - 潇湘隐者 - 博客园

convert expdp dmp file to SQL DDL statements

如何清除 DBA_DATAPUMP_JOBS 视图中的异常数据泵作业?(文档 ID 1626201.1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值