目录
迁移方案8-Oracle利用expdp/impdp(同平台)历史数据迁移导入导出-不同用户的相同名称表导入后进行合并并根据条件截断
一、项目背景
1、mes项目的变迁
从最初qdzhiban-mes系统统到SAP-mes,再到MY-mes,最后到最新的As-mes。
数据库数据经历了多此迁移。
目前使用的库中MY-mes包含了之前qdzhiban-mes和sap-mes的数据
2、项目要求
将上述迁移过得数据整合到新的AS-mes中。
3、系统环境
操作系统:源端和目标端都是Linux
版本信息:源端:Oracle 12.2.0.1.0,目标端:Oracle 11.2.0.4.0
4、问题描述
导出前,需要使用version参数指定目标端的版本,进行兼容导出。
二、项目规划
在当前库中,有两个用户A01_1001和mes_prd
1、迁移第一步:导出用户(A01_1001)的数据到新库的mesprd下面
A01_1001用户下表到迁移到As-mes下的mes_prd
OLD_PRDIFR,OLD_PRDIFO,OLD_PRDIFN,OLD_PRDIFM,OLD_PRDIFK,OLD_PRDIFJ,OLD_PRDIFI,OLD_PRDIFH,OLD_PRDIFG,OLD_PRDIF,OLD_PRDIFB,OLD_PRDIFA,OLD_PRDIFC,OLD_PRDIFL,OLD_PRDIFD,OLD_PRDIFE,PRDIFE,PRDIFF,PRDIFG,PRDIFH,PRDIFI,PRDIFL,PDIFM,PRDIFO,PRDIFQ,PRDIFR,mes_so_main,mes_so_ginfo,mes_so_dzinfo,mes_so_datetime,mes_so_datum
2、迁移第二步:当前在制数据导出
源库中mesprd用户下的表(如下),
PRDIFO,PRDIFG,PRDIFM,PRDIFF,PRDIFR,PRDIFD,PRDIFL,PRDIFC,PRDIFH,PRDIFI,PRDIFK,PRDIFB,PRDIFA,PRDIFJ,PRDIFE
3、迁移第三步:根据条件将数据导入目标库
注意:需要将
将源库用户mesprd下的表导入到目标库mes_prd下新库的下的表(OLD开头的表中),需要一一对应:
如:PRDIFO导入到OLD_PRDIFO中等。
MESPRD.OLD_PRDIFA,MESPRD.OLD_PRDIFB, MESPRD.OLD_PRDIFC,MESPRD.OLD_PRDIFD, MESPRD.OLD_PRDIFE,MESPRD.OLD_PRDIFF, MESPRD.OLD_PRDIFG,MESPRD.OLD_PRDIFH, MESPRD.OLD_PRDIFI,MESPRD.OLD_PRDIFJ, MESPRD.OLD_PRDIFK,MESPRD.OLD_PRDIFL, MESPRD.OLD_PRDIFM,MESPRD.OLD_PRDIFO, MESPRD.OLD_PRDIFR
4、迁移第三步:新增数据
生产库停止,导出新增数据,并导入到新库中。
三、方案实施步骤1/4:导入历史数据(A01_1001)
1、源库-导出语句
导出所需要的表。
expdp mesprd/Mes1qaz#EDC dumpfile=A01_1001_tables2.dmp logfile=A01_1001_tables.dmp2.log directory=BACKUP_MES tables=A01_1001.OLD_PRDIFR,A01_1001.OLD_PRDIFO,A01_1001.OLD_PRDIFN,A01_1001.OLD_PRDIFM,A01_1001.OLD_PRDIFK,A01_1001.OLD_PRDIFJ,A01_1001.OLD_PRDIFI,A01_1001.OLD_PRDIFH,A01_1001.OLD_PRDIFG,A01_1001.OLD_PRDIFF,A01_1001.OLD_PRDIFB,A01_1001.OLD_PRDIFA,A01_1001.OLD_PRDIFC,A01_1001.OLD_PRDIFL,A01_1001.OLD_PRDIFD,A01_1001.OLD_PRDIFE,A01_1001.PRDIFE,A01_1001.PRDIFF,A01_1001.PRDIFG,A01_1001.PRDIFH,A01_1001.PRDIFI,A01_1001.PRDIFL,A01_1001.PRDIFM,A01_1001.PRDIFO,A01_1001.PRDIFQ,A01_1001.PRDIFR,A01_1001.mes_so_main,A01_1001.mes_so_ginfo,A01_1001.mes_so_dzinfo,A01_1001.mes_so_datetime,A01_1001.mes_so_datum version=11.2.0.4.0
注意:当前表空间是MESPRD_TBSP,用户是A01_1001,数据迁移到新的表空间是MES_PRD,用户是A01_1001;
2、传输数据到目标库
scp -r A01_1001_tables2.dmp A01_1001_tables.dmp2.log oracle@10.40.0.230:/backup
3、目标库—创建用户(mes_prd)
CREATE tablespace MES_PRD DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA.DBF' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA01.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA02.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA03.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA04.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA05.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA06.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA07.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA08.dbf' size 10240m autoextend on next 1000m; alter tablespace MES_PRD add DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_PRD_DATA09.dbf' size 10240m autoextend on next 1000m;
4、目标库-创建临时表空间
CREATE tablespace MES_MM logging DATAFILE '/oracle/app/oracle/oradata/mesorcl/MES_MM_DATA.DBF' size 10240m autoextend on next 1000m; CREATE temporary tablespace MES_MM_TEMP tempfile '/oracle/app/oracle/oradata/mesorcl/MES_MM_TEMP.DBF' size 10240m autoextend on next 1000m; CREATE temporary tablespace MES_PRD_TEMP_NEW tempfile '/oracle/app/oracle/oradata/mesorcl/MES_PRD_TEMP_NEW.DBF' size 10240m autoextend on next 1000m;
5、目标库-创建用户并赋予权限
create user mes_prd identified by "mes800" default tablespace MES_PRD temporary tablespace MES_PRD_TEMP_NEW profile DEFAULT; grant read,write on directory backup_mes to mes_prd; grant connect,dba,resource to mes_prd ; grant unlimited tablespace to mes_prd with admin option;
6、检查原库表与目标库表各字段长度
(1)源库表
A01_1001.OLD_PRDIFA,A01_1001.OLD_PRDIFB,A01_1001.OLD_PRDIFC,A01_1001.OLD_PRDIFD,A01_1001.OLD_PRDIFE,A01_1001.OLD_PRDIFF,A01_1001.OLD_PRDIFG,A01_1001.OLD_PRDIFH,A01_1001.OLD_PRDIFI,A01_1001.OLD_PRDIFJ,A01_1001.OLD_PRDIFK,A01_1001.OLD_PRDIFL,A01_1001.OLD_PRDIFM,A01_1001.OLD_PRDIFN,A01_1001.OLD_PRDIFO,A01_1001.OLD_PRDIFR,A01_1001.PRDIFE,A01_1001.PRDIFF,A01_1001.PRDIFG,A01_1001.PRDIFH,A01_1001.PRDIFI,A01_1001.PRDIFL,A01_1001.PRDIFM,A01_1001.PRDIFO,A01_1001.PRDIFQ,A01_1001.PRDIFR,A01_1001.mes_so_main,A01_1001.mes_so_ginfo,A01_1001.mes_so_dzinfo,A01_1001.mes_so_datetime,A01_1001.mes_so_datum
(2)目标库表
MES_PRD.OLD_PRDIFA,MES_PRD.OLD_PRDIFB,MES_PRD.OLD_PRDIFC,MES_PRD.OLD_PRDIFD,MES_PRD.OLD_PRDIFE,MES_PRD.OLD_PRDIFF,MES_PRD.OLD_PRDIFG,MES_PRD.OLD_PRDIFH,MES_PRD.OLD_PRDIFI,MES_PRD.OLD_PRDIFJ,MES_PRD.OLD_PRDIFK,MES_PRD.OLD_PRDIFL,MES_PRD.OLD_PRDIFM,MES_PRD.OLD_PRDIFN,MES_PRD.OLD_PRDIFO,MES_PRD.OLD_PRDIFR,MES_PRD.PRDIFE,MES_PRD.PRDIFF,MES_PRD.PRDIFG,MES_PRD.PRDIFH,MES_PRD.PRDIFI,MES_PRD.PRDIFL,MES_PRD.PRDIFM,MES_PRD.PRDIFO,MES_PRD.PRDIFQ,MES_PRD.PRDIFR,MES_PRD.mes_so_main,MES_PRD.mes_so_ginfo,MES_PRD.mes_so_dzinfo,MES_PRD.mes_so_datetime,MES_PRD.mes_so_datum
(3)导入前处理(表格中标记):
对比源库用户A01_1001下的各表字段长度与目标端用户MES_PRD下已存在个表字段的长度,需要做修改,否则报错。
(4)清理目标库数据
truncate table MES_PRD.OLD_PRDIFA; truncate table MES_PRD.OLD_PRDIFB; truncate table MES_PRD.OLD_PRDIFC; truncate table MES_PRD.OLD_PRDIFD; truncate table MES_PRD.OLD_PRDIFE; truncate table MES_PRD.OLD_PRDIFF; truncate table MES_PRD.OLD_PRDIFG; truncate table MES_PRD.OLD_PRDIFH; truncate table MES_PRD.OLD_PRDIFI; truncate table MES_PRD.OLD_PRDIFJ; truncate table MES_PRD.OLD_PRDIFK; truncate table MES_PRD.OLD_PRDIFL; truncate table MES_PRD.OLD_PRDIFM; truncate table MES_PRD.OLD_PRDIFN; truncate table MES_PRD.OLD_PRDIFO; truncate table MES_PRD.OLD_PRDIFR; truncate table MES_PRD.PRDIFE; truncate table MES_PRD.PRDIFF; truncate table MES_PRD.PRDIFG; truncate table MES_PRD.PRDIFH; truncate table MES_PRD.PRDIFI; truncate table MES_PRD.PRDIFL; truncate table MES_PRD.PRDIFM; truncate table MES_PRD.PRDIFO; truncate table MES_PRD.PRDIFQ; truncate table MES_PRD.PRDIFR; truncate table MES_PRD.mes_so_main; truncate table MES_PRD.mes_so_ginfo; truncate table MES_PRD.mes_so_dzinfo; truncate table MES_PRD.mes_so_datetime; truncate table MES_PRD.mes_so_datum;
7、目标库-导入数据
Linux下Oracle 12c的用户A01_1001下的数据导入到Linux下Oracle 11g的用户mes_prd下的数据。
impdp mes_prd/mes800 dumpfile=A01_1001_tables2.dmp logfile=A01_1001_tables.dmp2.log DIRECTORY=backup_mes exclude=statistics remap_schema=A01_1001:MES_PRD table_exists_action=append
. . imported "MES_PRD"."PRDIFI" 601.1 KB 5534 rows . . imported "MES_PRD"."PRDIFL" 430.1 MB 2633388 rows . . imported "MES_PRD"."PRDIFH" 41.97 MB 389737 rows . . imported "MES_PRD"."MES_SO_DZINFO" 425.3 MB 1189519 rows . . imported "MES_PRD"."OLD_PRDIFF" 9.943 MB 373365 rows . . imported "MES_PRD"."OLD_PRDIFO" 205.3 MB 313405 rows . . imported "MES_PRD"."OLD_PRDIFL" 300.6 MB 2862028 rows . . imported "MES_PRD"."OLD_PRDIFC" 221.7 MB 5090536 rows . . imported "MES_PRD"."PRDIFF" 48.67 MB 480964 rows . . imported "MES_PRD"."PRDIFR" 22.79 MB 118919 rows . . imported "MES_PRD"."PRDIFE" 4.075 GB 186037 rows . . imported "MES_PRD"."OLD_PRDIFJ" 35.87 MB 313394 rows . . imported "MES_PRD"."OLD_PRDIFI" 70.38 KB 2366 rows . . imported "MES_PRD"."OLD_PRDIFG" 5.843 MB 220493 rows . . imported "MES_PRD"."OLD_PRDIFN" 0 KB 0 rows . . imported "MES_PRD"."MES_SO_GINFO" 48.05 MB 188324 rows . . imported "MES_PRD"."OLD_PRDIFM" 45.16 MB 315018 rows . . imported "MES_PRD"."PRDIFM" 82.40 MB 302635 rows . . imported "MES_PRD"."PRDIFG" 22.03 MB 201737 rows . . imported "MES_PRD"."MES_SO_DATETIME" 78.94 MB 188327 rows . . imported "MES_PRD"."MES_SO_DATUM" 456.0 MB 1918484 rows . . imported "MES_PRD"."MES_SO_MAIN" 268.0 MB 188324 rows . . imported "MES_PRD"."OLD_PRDIFH" 11.31 MB 374540 rows . . imported "MES_PRD"."OLD_PRDIFB" 28.76 MB 313371 rows . . imported "MES_PRD"."OLD_PRDIFK" 55.22 MB 313394 rows . . imported "MES_PRD"."OLD_PRDIFA" 61.78 MB 313374 rows . . imported "MES_PRD"."OLD_PRDIFE" 4.457 GB 313376 rows . . imported "MES_PRD"."OLD_PRDIFD" 141.5 MB 1713695 rows . . imported "MES_PRD"."OLD_PRDIFR" 14.47 MB 153537 rows
四、方案实施步骤2/4—当前在制数据导出(锁定所有表的“检查点”)
1、需要迁移的数据表如下:
源库用户mesprd下的表导入到目标库mes_prd下的旧表OLD_PRDIFO,OLD_PRDIFG,OLD_PRDIFM,OLD_PRDIFF等。
(1)源库表
MESPRD.PRDIFA,MESPRD.PRDIFB,MESPRD.PRDIFC,MESPRD.PRDIFD,MESPRD.PRDIFE,MESPRD.PRDIFF,MESPRD.PRDIFG,MESPRD.PRDIFH,MESPRD.PRDIFI,MESPRD.PRDIFJ,MESPRD.PRDIFK,MESPRD.PRDIFL,MESPRD.PRDIFM,MESPRD.PRDIFO,MESPRD.PRDIFR
(2)导入到目标库表
MESPRD.OLD_PRDIFA,MESPRD.OLD_PRDIFB,MESPRD.OLD_PRDIFC,MESPRD.OLD_PRDIFD,MESPRD.OLD_PRDIFE,MESPRD.OLD_PRDIFF,MESPRD.OLD_PRDIFG,MESPRD.OLD_PRDIFH,MESPRD.OLD_PRDIFI,MESPRD.OLD_PRDIFJ,MESPRD.OLD_PRDIFK,MESPRD.OLD_PRDIFL,MESPRD.OLD_PRDIFM,MESPRD.OLD_PRDIFO,MESPRD.OLD_PRDIFR
2、迁移前,需要备份目标库对应的表
(1)目的:预防导入数据表时,出现重复数据,可以快速恢复
因为目标库用户MES_PRD下,已经存在OLD_PRDIFO,OLD_PRDIFG等这些表且有数据,为防止导入后出现错误,需要在导入前备份表,有几种方法:
--①expdp 导出表,如果导入出现问题,可以truncate表或drop表,再利用impdp导入 --②sql语句创建表的副本,如果出现问题,可以删除原表,启用副本表 --③flashback闪回数据库(设置闪回点,如果导入出现问题,需要关库并配置到mount状态,进行闪回库,最终需要resetlogs,较麻烦。
根据情况来定。
expdp mes_prd/mes800 dumpfile=mes_prd_table_bak_20240328.dmp logfile=mes_prd_table_bak_20240328.log directory=BACKUP_MES \ tables=MES_PRD.OLD_PRDIFA,MES_PRD.OLD_PRDIFB,MES_PRD.OLD_PRDIFC,MES_PRD.OLD_PRDIFD,MES_PRD.OLD_PRDIFE,MES_PRD.OLD_PRDIFF,MES_PRD.OLD_PRDIFG,MES_PRD.OLD_PRDIFH,MES_PRD.OLD_PRDIFI,MES_PRD.OLD_PRDIFJ,MES_PRD.OLD_PRDIFK,MES_PRD.OLD_PRDIFL,MES_PRD.OLD_PRDIFM,MES_PRD.OLD_PRDIFO,MES_PRD.OLD_PRDIFR
. . exported "MES_PRD"."OLD_PRDIFE" 4.457 GB 313376 rows . . exported "MES_PRD"."OLD_PRDIFL" 300.6 MB 2862028 rows . . exported "MES_PRD"."OLD_PRDIFC" 221.7 MB 5090536 rows . . exported "MES_PRD"."OLD_PRDIFO" 205.3 MB 313405 rows . . exported "MES_PRD"."OLD_PRDIFD" 141.5 MB 1713695 rows . . exported "MES_PRD"."OLD_PRDIFA" 61.77 MB 313374 rows . . exported "MES_PRD"."OLD_PRDIFK" 55.22 MB 313394 rows . . exported "MES_PRD"."OLD_PRDIFM" 45.16 MB 315018 rows . . exported "MES_PRD"."OLD_PRDIFJ" 35.87 MB 313394 rows . . exported "MES_PRD"."OLD_PRDIFB" 28.76 MB 313371 rows . . exported "MES_PRD"."OLD_PRDIFR" 14.47 MB 153537 rows . . exported "MES_PRD"."OLD_PRDIFH" 11.31 MB 374540 rows . . exported "MES_PRD"."OLD_PRDIFF" 9.943 MB 373365 rows . . exported "MES_PRD"."OLD_PRDIFG" 5.843 MB 220493 rows . . exported "MES_PRD"."OLD_PRDIFI" 70.24 KB 2366 rows Master table "MES_PRD"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
(2)如果后期需要单独导入某个表数据,可以根据如下操作:
--首先truncate这张表
如:truncate table mes_prd.old_prdIFA;
--再次单独导入此表
impdp mes_prd/mes800 dumpfile=mes_prd_table_bak_20240328.dmp \ logfile=mes_prd_table_bak_20240328_imp.dmp2.log \ DIRECTORY=backup_mes exclude=statistics \ tables=MES_PRD.old_prdIFA TABLE_EXISTS_ACTION=append
3、对比源库和目标库的表结构
因为目标库用户MES_PRD下,已经存在OLD_PRDIFO,OLD_PRDIFG等这些表,所以需要比较源库用户MESPRD下的PRDIFO和目标库OLD_PRDIFO的表结构。然后才能将mesprd用户下的prdifo等表导入到mes_pd下的old_prdifo等表。
和开发沟通后,进行如下调整即可,--本案例有个特殊的表字段需要进行修改
alter table MES_PRD.OLD_PRDIFM MODIFY IFM18 NVARCHAR2(50);
4、获取源库表中所有表的递增值最大位置
注意:这里标记了最大位置,为了便于后面我们进行增量数据的重新导入。
select IFA01 from (select IFA01 from MESPRD.PRDIFA order by IFA01 desc) where rownum<10; --246310 select count(*) from MESPRD.PRDIFA where IFA01<=246310; --满足上述获取最大位置的数据条数:232884/232883 -- select IFB01 from (select IFB01 from MESPRD.PRDIFB order by IFB01 desc) where rownum<10; --245044 select count(*) from MESPRD.PRDIFB where IFB01<=245044; --满足上述获取最大位置的数据条数:232884/232883 -- select IFC01 from (select IFC01 from MESPRD.PRDIFC order by IFC01 desc) where rownum<10; --3899362 select count(*) from MESPRD.PRDIFC where IFC01<=3899362; --满足上述获取最大位置的数据条数:2392272/2392199 -- select IFD01 from (select IFD01 from MESPRD.PRDIFD order by IFD01 desc) where rownum<10; --2310695 select count(*) from MESPRD.PRDIFD where IFD01<=2310695; --满足上述获取最大位置的数据条数:1517317/1517307 -- select IFE01 from (select IFE01 from MESPRD.PRDIFE order by IFE01 desc) where rownum<10; --264732 select count(*) from MESPRD.PRDIFE where IFE01<=264732; --满足上述获取最大位置的数据条数:232884/232884 -- select IFF01 from (select IFF01 from MESPRD.PRDIFF order by IFF01 desc) where rownum<10; --4135388 select count(*) from MESPRD.PRDIFF where IFF01<=4135388; --满足上述获取最大位置的数据条数:2500333/2500253 -- select IFG01 from (select IFG01 from MESPRD.PRDIFG order by IFG01 desc) where rownum<10; --406588 select count(*) from MESPRD.PRDIFG where IFG01<=406588; --满足上述获取最大位置的数据条数:245469/245462 -- select IFH01 from (select IFH01 from MESPRD.PRDIFH order by IFH01 desc) where rownum<10; --1020217 select count(*) from MESPRD.PRDIFH where IFH01<=1020217; --满足上述获取最大位置的数据条数:633180/633167 -- select IFI01 from (select IFI01 from MESPRD.PRDIFI order by IFI01 desc) where rownum<10; --24181 select count(*) from MESPRD.PRDIFI where IFI01<=24181; --满足上述获取最大位置的数据条数:9219/9219 -- select IFJ01 from (select IFJ01 from MESPRD.PRDIFJ order by IFJ01 desc) where rownum<10; --264812 select count(*) from MESPRD.PRDIFJ where IFJ01<=264812; --满足上述获取最大位置的数据条数:232886/232885 -- select IFK01 from (select IFK01 from MESPRD.PRDIFK order by IFK01 desc) where rownum<10; --244939 select count(*) from MESPRD.PRDIFK where IFK01<=244939; --满足上述获取最大位置的数据条数:232886/232885 -- select IFL01 from (select IFL01 from MESPRD.PRDIFL order by IFL01 desc) where rownum<10; --6055997 select count(*) from MESPRD.PRDIFL where IFL01<=6055997; --满足上述获取最大位置的数据条数:3805541/3805400 -- select IFM01 from (select IFM01 from MESPRD.PRDIFM order by IFM01 desc) where rownum<10; --687741 select count(*) from MESPRD.PRDIFM where IFM01<=687741; --满足上述获取最大位置的数据条数:417586/417572 -- select IFO01 from (select IFO01 from MESPRD.PRDIFO order by IFO01 desc) where rownum<10; --245454 select count(*) from MESPRD.PRDIFO where IFO01<=245454; --满足上述获取最大位置的数据条数:232885/232884 -- select IFR01 from (select IFR01 from MESPRD.PRDIFR order by IFR01 desc) where rownum<10; --203381 select count(*) from MESPRD.PRDIFR where IFR01<=203381; --满足上述获取最大位置的数据条数:120812/120812
5、备份源库表(注意:这里一定要注意,一定要加条件导入。)
注意:如果全导出,导入时按条件导入,出现导入数据和导出前(select count(*) from MESPRD.PRDIFC where IFC01<=246310;)数据不一致的情况。所以,我们使用导出时就条件,导入时,可以顺利全部导入。
expdp mesprd/Mes1qaz#EDC dumpfile=S_MESPRD_PRDIFA_R.dmp logfile=S_MESPRD_PRDIFA_R.log DIRECTORY=backup_mes \ tables=MESPRD.PRDIFA,MESPRD.PRDIFB,MESPRD.PRDIFC,MESPRD.PRDIFD,MESPRD.PRDIFE,MESPRD.PRDIFF,MESPRD.PRDIFG,MESPRD.PRDIFH,MESPRD.PRDIFI,MESPRD.PRDIFJ,MESPRD.PRDIFK,MESPRD.PRDIFL,MESPRD.PRDIFM,MESPRD.PRDIFO,MESPRD.PRDIFR \ QUERY=MESPRD.PRDIFA:'"WHERE IFA01<=246310"',MESPRD.PRDIFB:'"WHERE IFB01<=245044"',MESPRD.PRDIFC:'"WHERE IFC01<=3899362"',MESPRD.PRDIFD:'"WHERE IFD01<=2310695"',MESPRD.PRDIFE:'"WHERE IFE01<=264732"',MESPRD.PRDIFF:'"WHERE IFF01<=4135388"',MESPRD.PRDIFG:'"WHERE IFG01<=406588"',MESPRD.PRDIFH:'"WHERE IFH01<=1020217"',MESPRD.PRDIFI:'"WHERE IFI01<=24181"',QUERY=MESPRD.PRDIFJ:'"WHERE IFJ01<=264812"',MESPRD.PRDIFK:'"WHERE IFK01<=244939"',MESPRD.PRDIFL:'"WHERE IFL01<=6055997"',MESPRD.PRDIFM:'"WHERE IFM01<=687741"',MESPRD.PRDIFO:'"WHERE IFO01<=245454"',MESPRD.PRDIFR:'"WHERE IFR01<=203381"' \ version=11.2.0.4.0
--全量导出表(当前不用)
expdp mesprd/Mes1qaz#EDC dumpfile=S_MESPRD_tables_20240329.dmp logfile=S_MESPRD_tables_20240329.log directory=BACKUP_MES tables=MESPRD.PRDIFA,MESPRD.PRDIFB,MESPRD.PRDIFC,MESPRD.PRDIFD,MESPRD.PRDIFE,MESPRD.PRDIFF,MESPRD.PRDIFG,MESPRD.PRDIFH,MESPRD.PRDIFI,MESPRD.PRDIFJ,MESPRD.PRDIFK,MESPRD.PRDIFL,MESPRD.PRDIFM,MESPRD.PRDIFO,MESPRD.PRDIFR version=11.2.0.4.0
6、导出时的所有表数据量
. . exported "MESPRD"."PRDIFA" 83.47 MB 232883 rows . . exported "MESPRD"."PRDIFB" 62.25 MB 232883 rows . . exported "MESPRD"."PRDIFC" 101.9 MB 2392199 rows . . exported "MESPRD"."PRDIFD" 198.1 MB 1517307 rows . . exported "MESPRD"."PRDIFE" 20.83 GB 232883 rows . . exported "MESPRD"."PRDIFF" 99.16 MB 2500253 rows . . exported "MESPRD"."PRDIFG" 9.397 MB 245461 rows . . exported "MESPRD"."PRDIFH" 26.49 MB 633167 rows . . exported "MESPRD"."PRDIFI" 267.9 KB 9219 rows . . exported "MESPRD"."PRDIFJ" 33.35 MB 232885 rows . . exported "MESPRD"."PRDIFK" 64.42 MB 232885 rows . . exported "MESPRD"."PRDIFL" 297.5 MB 3805400 rows . . exported "MESPRD"."PRDIFM" 78.84 MB 417572 rows . . exported "MESPRD"."PRDIFO" 21.74 MB 232884 rows . . exported "MESPRD"."PRDIFR" 12.20 MB 120812 rows
7、传输文件到目标端
scp -r /data/expdp/S_MESPRD_PRDIFA_R.dmp oracle@10.40.0.230:/backup/expdp
8、查看目标端OLD_*表的的主键和唯一键
(1)查看所有表,发现上述表,没有任何主键和唯一约束,以PRDIFG表为例
和开发沟通后,可以直接导入数据。
五、方案实施步骤3/4—导入目标数据库
1、导入目标端前,查看所有目标库表(OLD_开头)有多少条数据
(用于比较导入前后的数据量是否是一致的)
select count(*) as A from MES_PRD.OLD_PRDIFA; --313374 select count(*) as B from MES_PRD.OLD_PRDIFB; --313371 select count(*) as C from MES_PRD.OLD_PRDIFC; --5090536 select count(*) as D from MES_PRD.OLD_PRDIFD; --1713695 select count(*) as E from MES_PRD.OLD_PRDIFE; --313376 select count(*) as F from MES_PRD.OLD_PRDIFF; --373365 select count(*) as G from MES_PRD.OLD_PRDIFG; --220493 select count(*) as H from MES_PRD.OLD_PRDIFH; --374540 select count(*) as I from MES_PRD.OLD_PRDIFI; --2366 select count(*) as J from MES_PRD.OLD_PRDIFJ; --313394 select count(*) as K from MES_PRD.OLD_PRDIFK; --313394 select count(*) as L from MES_PRD.OLD_PRDIFL; --2862028 select count(*) as M from MES_PRD.OLD_PRDIFM; --315018 select count(*) as O from MES_PRD.OLD_PRDIFO; --313405 select count(*) as R from MES_PRD.OLD_PRDIFR; --153537
2、根据各表的导出数据,进行数据导入(对比数据)
impdp mes_prd/mes800 dumpfile=S_MESPRD_PRDIFA_R.dmp logfile=S_MESPRD_PRDIFA_R_imp.log DIRECTORY=backup_mes exclude=statistics remap_schema=MESPRD:MES_PRD \ remap_table=PRDIFA:OLD_PRDIFA,PRDIFB:OLD_PRDIFB,PRDIFC:OLD_PRDIFC,PRDIFD:OLD_PRDIFD,PRDIFE:OLD_PRDIFE,PRDIFF:OLD_PRDIFF,PRDIFG:OLD_PRDIFG,PRDIFH:OLD_PRDIFH,PRDIFI:OLD_PRDIFI,PRDIFJ:OLD_PRDIFJ,PRDIFK:OLD_PRDIFK,PRDIFL:OLD_PRDIFL,PRDIFM:OLD_PRDIFM,PRDIFO:OLD_PRDIFO,PRDIFR:OLD_PRDIFR \ TABLE_EXISTS_ACTION=append
3、查看导入日志(主要看成功与导入数量)
经检查,确认一致,导入成功。(为方便对比,将表导入顺序,用手工做了调整。)
. . imported "MES_PRD"."OLD_PRDIFA" 83.47 MB 232883 rows 1259 . . imported "MES_PRD"."OLD_PRDIFB" 62.25 MB 232883 rows . . imported "MES_PRD"."OLD_PRDIFC" 101.9 MB 2392199 rows . . imported "MES_PRD"."OLD_PRDIFD" 198.1 MB 1517307 rows . . imported "MES_PRD"."OLD_PRDIFE" 20.83 GB 232883 rows . . imported "MES_PRD"."OLD_PRDIFF" 99.16 MB 2500253 rows . . imported "MES_PRD"."OLD_PRDIFG" 9.397 MB 245461 rows . . imported "MES_PRD"."OLD_PRDIFH" 26.49 MB 633167 rows . . imported "MES_PRD"."OLD_PRDIFI" 267.9 KB 9219 rows . . imported "MES_PRD"."OLD_PRDIFJ" 33.35 MB 232885 rows . . imported "MES_PRD"."OLD_PRDIFK" 64.42 MB 232885 rows . . imported "MES_PRD"."OLD_PRDIFL" 297.5 MB 3805400 rows . . imported "MES_PRD"."OLD_PRDIFM" 78.84 MB 417572 rows . . imported "MES_PRD"."OLD_PRDIFO" 21.74 MB 232884 rows . . imported "MES_PRD"."OLD_PRDIFR" 12.20 MB 120812 rows Processing object type TABLE_EXPORT/TABLE/COMMENT
六、方案实施步骤4/4—正式切换—源库停业务,新增数据导入。
1、源库业务停止(停止服务,启动到read only状态)
shutdown immediate; statrtup mount; alter database open read only;
2、源库表的数据量
(1)所有两
select count(*) as A from MESPRD.PRDIFA; --234140 select count(*) as B from MESPRD.PRDIFB; --234140 select count(*) as C from MESPRD.PRDIFC; --2405642 select count(*) as D from MESPRD.PRDIFD; --1525709 select count(*) as E from MESPRD.PRDIFE; --234139 select count(*) as F from MESPRD.PRDIFF; --2514157 select count(*) as G from MESPRD.PRDIFG; --246908 select count(*) as H from MESPRD.PRDIFH; --636130 select count(*) as I from MESPRD.PRDIFI; --9247 select count(*) as J from MESPRD.PRDIFJ; --234141 select count(*) as K from MESPRD.PRDIFK; --234141 select count(*) as L from MESPRD.PRDIFL; --3829970 select count(*) as M from MESPRD.PRDIFM; --419916 select count(*) as O from MESPRD.PRDIFO; --234140 select count(*) as R from MESPRD.PRDIFR; --121448
(2)查看源库条件数量
select count(*) as A from MESPRD.PRDIFA where IFA01<=246310; --232881
select count(*) as B from MESPRD.PRDIFB where IFB01<=245044; --232881
select count(*) as C from MESPRD.PRDIFC where IFC01<=3899362; --2392114
select count(*) as D from MESPRD.PRDIFD where IFD01<=2310695; --1517267
select count(*) as E from MESPRD.PRDIFE where IFE01<=2310695; --232881
select count(*) as F from MESPRD.PRDIFF where IFF01<=4135388; --2500170
select count(*) as G from MESPRD.PRDIFG where IFG01<=406588; --245454
select count(*) as H from MESPRD.PRDIFH where IFH01<=1020217; --633150
select count(*) as I from MESPRD.PRDIFI where IFI01<=24181; --9219
select count(*) as J from MESPRD.PRDIFJ where IFJ01<=264812; --232883
select count(*) as K from MESPRD.PRDIFK where IFK01<=244939; --232883
select count(*) as L from MESPRD.PRDIFL where IFL01<=6055997; --3805249
select count(*) as M from MESPRD.PRDIFM where IFM01<=687741; --417561
select count(*) as O from MESPRD.PRDIFO where IFO01<=245454; --232882
select count(*) as R from MESPRD.PRDIFR where IFR01<=203381; --120810
3、源库导出数据
(1)导入语句
expdp mesprd/Mes1qaz#EDC dumpfile=S_MESPRD_PRDIFA_R_latest.dmp logfile=S_MESPRD_PRDIFA_R_latest.log DIRECTORY=backup_mes \ tables=MESPRD.PRDIFA,MESPRD.PRDIFB,MESPRD.PRDIFC,MESPRD.PRDIFD,MESPRD.PRDIFE,MESPRD.PRDIFF,MESPRD.PRDIFG,MESPRD.PRDIFH,MESPRD.PRDIFI,MESPRD.PRDIFJ,MESPRD.PRDIFK,MESPRD.PRDIFL,MESPRD.PRDIFM,MESPRD.PRDIFO,MESPRD.PRDIFR \ QUERY=MESPRD.PRDIFA:'"WHERE IFA01>246310"',MESPRD.PRDIFB:'"WHERE IFB01>245044"',MESPRD.PRDIFC:'"WHERE IFC01>3899362"',MESPRD.PRDIFD:'"WHERE IFD01>2310695"',MESPRD.PRDIFE:'"WHERE IFE01>264732"',MESPRD.PRDIFF:'"WHERE IFF01>4135388"',MESPRD.PRDIFG:'"WHERE IFG01>406588"',MESPRD.PRDIFH:'"WHERE IFH01>1020217"',MESPRD.PRDIFI:'"WHERE IFI01>24181"',QUERY=MESPRD.PRDIFJ:'"WHERE IFJ01>264812"',MESPRD.PRDIFK:'"WHERE IFK01>244939"',MESPRD.PRDIFL:'"WHERE IFL01>6055997"',MESPRD.PRDIFM:'"WHERE IFM01>687741"',MESPRD.PRDIFO:'"WHERE IFO01>245454"',MESPRD.PRDIFR:'"WHERE IFR01>203381"' \ version=11.2.0.4.0
(2)导出数据量
记录导出日志
. . exported "MESPRD"."PRDIFA" 511.7 KB 1259 rows . . exported "MESPRD"."PRDIFB" 361.2 KB 1259 rows . . exported "MESPRD"."PRDIFC" 596.2 KB 13528 rows . . exported "MESPRD"."PRDIFD" 1.222 MB 8442 rows . . exported "MESPRD"."PRDIFE" 116.4 MB 1258 rows . . exported "MESPRD"."PRDIFF" 580.3 KB 13987 rows . . exported "MESPRD"."PRDIFG" 64.85 KB 1454 rows . . exported "MESPRD"."PRDIFH" 137.8 KB 2980 rows . . exported "MESPRD"."PRDIFI" 7.710 KB 28 rows . . exported "MESPRD"."PRDIFJ" 236.2 KB 1258 rows . . exported "MESPRD"."PRDIFK" 356.0 KB 1258 rows . . exported "MESPRD"."PRDIFL" 1.935 MB 24721 rows . . exported "MESPRD"."PRDIFM" 482.5 KB 2355 rows . . exported "MESPRD"."PRDIFO" 147.5 KB 1258 rows . . exported "MESPRD"."PRDIFR" 83.57 KB 638 rows
3、导入数据前,查看目标库当前各OLD表数据量
select count(*) as A from MES_PRD.OLD_PRDIFA; --546257 select count(*) as B from MES_PRD.OLD_PRDIFB; --546254 select count(*) as C from MES_PRD.OLD_PRDIFC; --7482735 select count(*) as D from MES_PRD.OLD_PRDIFD; --3231002 select count(*) as E from MES_PRD.OLD_PRDIFE; --546259 select count(*) as F from MES_PRD.OLD_PRDIFF; --2873618 select count(*) as G from MES_PRD.OLD_PRDIFG; --465954 select count(*) as H from MES_PRD.OLD_PRDIFH; --1007707 select count(*) as I from MES_PRD.OLD_PRDIFI; --11585 select count(*) as J from MES_PRD.OLD_PRDIFJ; --546279 select count(*) as K from MES_PRD.OLD_PRDIFK; --546279 select count(*) as L from MES_PRD.OLD_PRDIFL; --6667428 select count(*) as M from MES_PRD.OLD_PRDIFM; --732590 select count(*) as O from MES_PRD.OLD_PRDIFO; --546289 select count(*) as R from MES_PRD.OLD_PRDIFR; --274349
4、传输表数据到目标端
scp -r S_MESPRD_PRDIFA_R_latest.dmp S_MESPRD_PRDIFA_R_latest.log oracle@10.40.0.230:/backup/expdp
5、根据各自数据导入数据(对比数据)
(1)导入数据
impdp mes_prd/mes800 dumpfile=S_MESPRD_PRDIFA_R_latest.dmp logfile=S_MESPRD_PRDIFA_R_latest_imp.log DIRECTORY=backup_mes exclude=statistics remap_schema=MESPRD:MES_PRD \ remap_table=PRDIFA:OLD_PRDIFA,PRDIFB:OLD_PRDIFB,PRDIFC:OLD_PRDIFC,PRDIFD:OLD_PRDIFD,PRDIFE:OLD_PRDIFE,PRDIFF:OLD_PRDIFF,PRDIFG:OLD_PRDIFG,PRDIFH:OLD_PRDIFH,PRDIFI:OLD_PRDIFI,PRDIFJ:OLD_PRDIFJ,PRDIFK:OLD_PRDIFK,PRDIFL:OLD_PRDIFL,PRDIFM:OLD_PRDIFM,PRDIFO:OLD_PRDIFO,PRDIFR:OLD_PRDIFR \ TABLE_EXISTS_ACTION=append
(2)导入数据量对比(主要看导入数量是否与导出一致)
对比2.2导出的数据和导入是否一致。
经检查,确认一致,导入成功。
. . imported "MES_PRD"."OLD_PRDIFE" 20.83 GB 232883 rows
. . imported "MES_PRD"."OLD_PRDIFK" 64.42 MB 232885 rows
. . imported "MES_PRD"."OLD_PRDIFR" 12.20 MB 120812 rows
. . imported "MES_PRD"."OLD_PRDIFG" 9.397 MB 245461 rows
. . imported "MES_PRD"."OLD_PRDIFH" 26.49 MB 633167 rows
. . imported "MES_PRD"."OLD_PRDIFI" 267.9 KB 9219 rows
. . imported "MES_PRD"."OLD_PRDIFB" 62.25 MB 232883 rows
. . imported "MES_PRD"."OLD_PRDIFC" 101.9 MB 2392199 rows
. . imported "MES_PRD"."OLD_PRDIFJ" 33.35 MB 232885 rows
. . imported "MES_PRD"."OLD_PRDIFM" 78.84 MB 417572 rows
. . imported "MES_PRD"."OLD_PRDIFL" 297.5 MB 3805400 rows
. . imported "MES_PRD"."OLD_PRDIFA" 83.47 MB 232883 rows
. . imported "MES_PRD"."OLD_PRDIFF" 99.16 MB 2500253 rows
. . imported "MES_PRD"."OLD_PRDIFD" 198.1 MB 1517307 rows
. . imported "MES_PRD"."OLD_PRDIFO" 21.74 MB 232884 rows
七、Final—其他表数据导入(PREPRESS_MES_VERSION_NO导入 MES_VERSION_NO)
1、查看两表结构
(1)源端表—MESPRD.PREPRESS_MES_VERSION_NO
desc mesprd.PREPRESS_MES_VERSION_NO
SQL> desc mesprd.prepress_mes_version_no;
Name Null? Type 映射到目标表
----------------------------------------------------- -------- ---------------- --------------------
ID NOT NULL VARCHAR2(36) --row_id
DATETIME_CREATED DATE --CREATEDATE
USER_CREATED VARCHAR2(80) --LASTUPDATEDATE
DATETIME_MODIFIED DATE --LASTUPDATEBY
USER_MODIFIED VARCHAR2(80)
STATE CHAR(1)
ENTERPRISE_ID VARCHAR2(36)
ORG_ID VARCHAR2(36)
COID NVARCHAR2(4)
FACTORYID NVARCHAR2(4)
VERSION_NO NVARCHAR2(50)
SALESMAN NVARCHAR2(50)
VN_STATUS NVARCHAR2(50)
RESERVE NVARCHAR2(50)
BUILD_TYPE NVARCHAR2(50)
FROM_VERSION_NO NVARCHAR2(50)
BUFFER1 NVARCHAR2(150)
BUFFER2 NVARCHAR2(150)
BUFFER3 NVARCHAR2(150)
BUFFER4 NVARCHAR2(150)
BUFFER5 NVARCHAR2(150)
BUFFER6 NVARCHAR2(150)
BUFFER7 NVARCHAR2(150)
BUFFER8 NVARCHAR2(150)
BUFFER9 NVARCHAR2(150)
BUFFER10 NVARCHAR2(150)
BUFFER11 NVARCHAR2(150)
BUFFER12 NVARCHAR2(150)
BUFFER13 NVARCHAR2(150)
BUFFER14 NVARCHAR2(150)
BUFFER15 NVARCHAR2(150)
BUFFER16 NVARCHAR2(150)
BUFFER17 NVARCHAR2(150)
BUFFER18 NVARCHAR2(150)
BUFFER19 NVARCHAR2(150)
BUFFER20 NVARCHAR2(150)
REMARK NVARCHAR2(200)
(2)目标表—MES_PRD.MES_VERSION_NO-(35列)
desc mes_prd.PREPRESS_MES_VERSION_NO
10:25:00 SYS@mesorcl>desc mes_prd.mes_version_no Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ROW_ID NOT NULL NVARCHAR2(50) COID NVARCHAR2(4) FACTORYID NVARCHAR2(4) VERSION_NO NVARCHAR2(50) SALESMAN NVARCHAR2(50) VN_STATUS NVARCHAR2(50) RESERVE NVARCHAR2(50) BUILD_TYPE NVARCHAR2(50) FROM_VERSION_NO NVARCHAR2(50) ENABLEFLAG NVARCHAR2(2) BUFFER1 NVARCHAR2(150) BUFFER2 NVARCHAR2(150) BUFFER3 NVARCHAR2(150) BUFFER4 NVARCHAR2(150) BUFFER5 NVARCHAR2(150) BUFFER6 NVARCHAR2(150) BUFFER7 NVARCHAR2(150) BUFFER8 NVARCHAR2(150) BUFFER9 NVARCHAR2(150) BUFFER10 NVARCHAR2(150) BUFFER11 NVARCHAR2(150) BUFFER12 NVARCHAR2(150) BUFFER13 NVARCHAR2(150) BUFFER14 NVARCHAR2(150) BUFFER15 NVARCHAR2(150) BUFFER16 NVARCHAR2(150) BUFFER17 NVARCHAR2(150) BUFFER18 NVARCHAR2(150) BUFFER19 NVARCHAR2(150) BUFFER20 NVARCHAR2(150) REMARK NVARCHAR2(200) CREATEDATE DATE CREATEBY NVARCHAR2(50) LASTUPDATEDATE DATE LASTUPDATEBY NVARCHAR2(50) RESERVE_COUNT NVARCHAR2(80)
2、源端导出表数据
(1)导出数据
expdp mesprd/Mes1qaz#EDC dumpfile=S_MESPRD_Tables_PREPRESS_MES_VERSION_NO.dmp logfile=S_MESPRD_Tables_PREPRESS_MES_VERSION_NO.log DIRECTORY=backup_mes \ tables=PREPRESS_MES_VERSION_NO version=11.2.0.4.0 . . exported "MESPRD"."PREPRESS_MES_VERSION_NO" 226.1 MB 1229048 rows
(2)传输数据到目标端(表名更改)
scp -r S_MESPRD_Tables_PREPRESS_MES_VERSION_NO.dmp oracle@10.40.0.230:/backup/expdp
3、查看目标表
select count(*) from mes_prd.PREPRESS_MES_VERSION_NO; --无此表
select count(*) from mes_prd.mes_version_no; --数据表数量为0
4、导入数据
impdp mes_prd/mes800 dumpfile=S_MESPRD_Tables_PREPRESS_MES_VERSION_NO.dmp logfile=S_MESPRD_Tables_PREPRESS_MES_VERSION_NO_imp_3.log DIRECTORY=backup_mes remap_schema=MESPRD:MES_PRD remap_tablespace=mesprd_tbsp:mes_prd
. . imported "MES_PRD"."PREPRESS_MES_VERSION_NO" 226.1 MB 1229048 rows
5、将数据插入到新表
INSERT INTO mes_prd.mes_version_no ( ROW_ID, CREATEDATE, CREATEBY, LASTUPDATEDATE, LASTUPDATEBY, ENABLEFLAG, COID, FACTORYID, VERSION_NO, SALESMAN, VN_STATUS, RESERVE, BUILD_TYPE, FROM_VERSION_NO, BUFFER1, BUFFER2, BUFFER3, BUFFER4, BUFFER5, BUFFER6, BUFFER7, BUFFER8, BUFFER9, BUFFER10, BUFFER11, BUFFER12, BUFFER13, BUFFER14, BUFFER15, BUFFER16, BUFFER17, BUFFER18, BUFFER19, BUFFER20) SELECT ID AS ROW_ID, DATETIME_CREATED AS CREATEDATE, USER_CREATED AS CREATEBY, DATETIME_MODIFIED AS LASTUPDATEDATE, USER_MODIFIED AS LASTUPDATEBY, 'Y' ENABLEFLAG, COID, FACTORYID, VERSION_NO, SALESMAN, VN_STATUS, RESERVE, BUILD_TYPE, FROM_VERSION_NO, BUFFER1, BUFFER2, BUFFER3, BUFFER4, BUFFER5, BUFFER6, BUFFER7, BUFFER8, BUFFER9, BUFFER10, BUFFER11, BUFFER12, BUFFER13, BUFFER14, BUFFER15, BUFFER16, BUFFER17, BUFFER18, BUFFER19, BUFFER20 FROM PREPRESS_MES_VERSION_NO; --导入时注意唯一约束和重复值 DELETE FROM PREPRESS_MES_VERSION_NO WHERE VERSION_NO = 'B2066520G1' AND ID != '04119abdd77a4a26b901e70ad032def7'