1、前言
GoldenGate在出现ENABLE_INSTANTIATION_FILTERING新特性之前,我们需要在初始化时指定FLASHBACK_SCN的方式来实现数据的一致性导出,同样,在目标端第一次启动复制进程时,也需要指定aftercsn的方式来启动复制进程。
指定SCN的方式,主要存在如下缺点:
(1).SCN的指定是一个特别需要注意的地方,如果SCN的指定位置不对,则会出现数据不一致的问题,最终导致初始化失败。
(2).如果数据库量太大,或者指定的SCN太旧,就会在初始化导出的过程中出现大量的“ORA-01555”错误。后期还需要单独处理这些报错。
从GoldenGate12.2版本开始,add trandata或add schematrandata命令会自动将这些表的状态准备好。expdp在导出时,会自动添加SCN到对应的表中,此时,只需要在Replicat进程使用DBOPTIONS ENABLE_INSTANTIATION_FILTERING参数,即可自动过滤SCN之前的DML和DDL操作。
2、传统方式如何保证数据一致性
2.1 为了保证数据初始化时不会出现数据不一致的情况,我们在选择SCN位置时,需要选择 min( current_scn, 数据库当前存在的最早事务的启动SCN)。 作为数据源初始化的flaskback scn:
col value for 99999999999999
select 'exp_scn' item, current_scn value from v$database
union all
select 'Min_start_scn' item,min(start_scn) value from gv$transaction;
2.2 数据一致性导出,指定FLASHBACK_SCN参数。
expdp.par文件内容如下所示:
DIRECTORY=dpdir
SCHEMAS=(ctaisd)
LOGFILE=expdp.log
FLASHBACK_SCN=18436419212108
cluster=n
dumpfile=expdp_%U.dmp
parallel=4
EXCLUDE=STATISTICS
compression=all
2.3 目标端数据导入后,启动复制时,需要指定aftercsn选项。
start replicat R_0a, aftercsn 18436419212108
3、ENABLE_INSTANTIATION_FILTERING新特性如何保证数据一致性
3.1 再也不用为指定SCN的位置而烦恼。无需指定SCN。
3.2 数据一致性导出,不再指定FLASHBACK_SCN参数。
expdp.par文件内容如下所示:
DIRECTORY=dpdir
SCHEMAS=(ctaisd)
LOGFILE=expdp.log
cluster=n
dumpfile=expdp_%U.dmp
parallel=4
EXCLUDE=STATISTICS
compression=all
3.3 目标端复制进程的配置文件时,指定ENABLE_INSTANTIATION_FILTERING参数。例如:
replicat r_0a -- DB environment settings SETENV (ORACLE_HOME = "/u01/app/oracle/product/19.0.0/dbhome_1") SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") userid gguser@OGGDB_GOLDENGATE_TARGET, password gguser assumetargetdefs APPLYNOOPUPDATES DBOPTIONS SUPPRESSTRIGGERS DBOPTIONS DEFERREFCONST DDL INCLUDE MAPPED DDLERROR DEFAULT DISCARD discardfile ./dirdat/r_0a.dsc, append, megabytes 1000 DBOPTIONS ENABLE_INSTANTIATION_FILTERING MAP test.*, TARGET test.*; MAP mm.*, TARGET mm.*; |
3.4 目标端数据导入后,启动复制时,不再需要指定aftercsn选项。
start replicat R_0a
可以看出:GoldenGate引入ENABLE_INSTANTIATION_FILTERING新特性后,数据初始化工作变得非常简单。