oracle 数据泵导入导出 expdp/impdp
目录
一、 导出/入前检查
查看用户默认表空间
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
三、 导入数据
1. 注意事项
注意先检查目标表空间是否存在
检查目标磁盘空间及表空间大小
导入时注意检查DB等待事件及alert log,出现异常时及时处理
2. 常用选项
导入新用户下 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:删除已存在表,重建并插入数据(不安全,谨慎使用)
3. 导入例子
导入前准备(可选)
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. | 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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)