暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

impdp导入数据的简单重映射

原创 陈坤 云和恩墨 2021-11-09
2477

最近在工作中遇到数据迁移并更改schema的需求。于是在测试环境中测试了expdp,impdp的更改的一些参数。

搭建实验环境:

准备一个oracle 11g 的环境作为源库,一个oracle 19c的环境作为目标库:

查询用户和状态:

set lines 200
set pages 99
col username for a30;
select username,account_status from dba_users order by account_status;

在源库创建实验用户
create user AAA identified by 123456 default tablespace USERS temporary tablespace temp;
create user BBB identified by 123456 default tablespace USERS temporary tablespace temp;
create user CCC identified by 123456 default tablespace USERS temporary tablespace temp;
给用户授权:
grant create session to AAA;
grant create table to AAA;
grant connect,resource to AAA;

grant create session to BBB;
grant create table to BBB;
grant connect,resource to BBB;
grant create session to CCC;
grant create table to CCC;
grant connect,resource to CCC;

在实验用户下创建实验数据
conn AAA/123456
create table a_t1 (id varchar2(50) primary key , name char(200) not null);
insert into a_t1 (id,name) values ('1001','aaa');
conn BBB/123456
create table b_t1 (name varchar2(50) primary key , age number not null);
insert into b_t1 (name, age) values ('bbb',11);
conn CCC/123456
create table c_t1 (name varchar2(50) primary key , pet char(200) not null);
insert into c_t1 (name,pet) values ('cheer','cat');

查询scn
select to_char(dbms_flashback.get_system_change_number) scn_number from dual;
查询目录
select * from dba_directories;
创建目录
create directory EXPDATA as '/u01/app/expdata'

源库计划用sys用户进行导出,所以就省略授权步骤


目标库准备:

create directory IMPDATA as '/u01/app/impdata'
将目录授权给导入用户
grant read,write on directory IMPDATA to C##ENMO;

目标库使用已经存在的PDB1

给PDB1创建tns:

PDB1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.141)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PDB1)
)
)

创建expdp导出配置文件:
vi expdp_202111091542.par
写入:
userid="system/123456@orcl"
directory=EXPDATA
schemas=AAA,BBB,CCC
dumpfile=expdp_202111091542.dmp
logfile=expdp_202111091542.log
flashback_scn=1824331
parallel=1
cluster=n
version=11.2

导出命令
expdp parfile=expdp_202111091542.par

使用scp 将dmp文件传输到目标库上:

scp expdp_202111091542.dmp root@192.168.182.141:/u01/app/impdata

测试导入用户连接是否正常
sqlplus C##ENMO/123456@PDB1

在目标库创建impdp导入配置文件
vi impdp_202111091605.par
写入以下内容
userid="C##ENMO/123456@PDB1"
directory=IMPDATA
EXCLUDE=SCHEMA:"='AAA'"
REMAP_SCHEMA=CCC:FFF
REMAP_TABLE=CCC.C_T1:F_T1
dumpfile=expdp_202111091542.dmp
logfile=impdp_202111091605.log
parallel=1
cluster=n

impdp 导入命令
impdp parfile=impdp_202111091605.par

使用参数解释

如果全部导入,并且将旧库schema CCC下的所有对象放在新库schema FFF下面,只用配置:
REMAP_SCHEMA=CCC:FFF
如果需要排除某SCHEMA,并且更改schema:
REMAP_SCHEMA=CCC:FFF
EXCLUDE=SCHEMA:"='AAA'"
更改schema,并且同时更改table_name,注意这里两个参数都需要填:
REMAP_SCHEMA=CCC:FFF
REMAP_TABLE=CCC.C_T1:F_T1 

注意:

如果同时配置SCHEMA参数和REMAP_SCHEMA,必须在SCHEMA中包含需要重映射的sechma,例如:

SCHEMAS=AAA,BBB,CCC

REMAP_SCHEMA=CCC:FFF

这样才能正确导入。

如果在SCHEMAS中省略重映射的CCC,例如:

SCHEMAS=AAA,BBB

REMAP_SCHEMA=CCC:FFF

这种情况下只会导入AAA,BBB.REMAP_SCHEMA参数不会生效,可以理解为CCC根本就没导入,所以就不存在重映射的操作。


官方还提供了其他重映射的参数,具体参考oracle官方文档:
https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/datapump-import-utility.html#GUID-BA74D4F6-2840-4002-A673-0A7D9CBB3D78

最后修改时间:2021-11-09 17:52:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论