Oracle OGG 单表重新初始化同步的两种思路
by ACDdante
一、应用需求
由于多种原因导致OGG源端和目标端两端数据不一致,且总体数据量差异较大,如果整个schema重新进行初始化,工作量过于巨大,且业务要求也不允许。在这种情况下,可考虑对数据出现不一致的单张表或者多张表进行初始化。
二、基本思路
001、使用replicat进程完成单表重新初始化
①在目标端将出现数据不一致的表从replicat进程中排除
②基于源端SCN对单张表或者多张表单独建立replicat进程进行初始化
③等到新的replicat进行无延迟时停掉目标端对应的datapump进程
④停止并删除新建的replicat进程,在原replicat进程中添加这些差异 表,指定SCN启动rep进程,完成数据同步
002、使用expdp/impdp数据导入导出完成单表重新初始化
①在目标端将出现数据不一致的表从replicat进程中排除,并重启rep进程
②在源端,基于最新SCN将该表单独导出expdp,并拷贝至目标端
③在目标端,删除该差异表,drop table schema.tablexxx;使用impdp重新导入该表数据。
④目标端,replicat进程将该表配置同步,指定SCN重新启动replicat进程,观察数据同步状态
!==============================================!
1、在目标端上,将MS_XXX 单表排除
edit param reptxyy
MAPEXCLUDE HIS.MS_XXX
重启REPXXXX应用进程
2、在 源端上查询最新的SCN
col current_scn for 999999999
select current_scn from v$database;
scn
16563972104
3、导数据到目标端:
源端导出MS_XXX表数据
expdp system/password directory=IMPDP dumpfile=xxxxhis20180122.dmp logfile=xxxxhis20180122.log tables=HIS.MS_XXX flashback_scn=16564108704
scp XXXXhis20180122.dmp 目标端IP:/u01/app/expdp
4、目标端导入数据
impdp system/password directory=expdp dumpfile=xxxxhis20180122.dmp logfile=xxxxhis20180122.log PARALLEL=4 tables=HIS.MS_XXX REMAP_SCHEMA=HIS:XXXX_HIS REMAP_TABLESPACE=HIS:XXXX_HIS transform=OID:N ignore=y
5、目标端指定SCN启动replicat
edit param repxxxx
删除排除MS_XXX表配置
通过指定SCN启动REPXXXX进程
start replicat REPXXXX, aftercsn 16563972104
6、查看数据同步状态
或者在目标端replicat进程中配置单表同步SCN起始位:
map HIS.MS_XXX, target XXXX_HIS.MS_XXX, filter(@GETENV("transaction","csn") >16563972104);
!===============================================!