alias Extract进程不需要配置文件 添加语法:
ADD EXTRACT
, RMTHOST {
此处测试的创建命令如下:
GGSCI> add extract ext146pa, rmthost 192.168.0.146, mgrport 7801, rmtname pumpa
--需要定义源端的地址、端口,而且如果alias extract名称和passive extract名称不同,需要特别指定rmtname
(2)添加应用进程(与普通情况下完全一样)
GGSCI> add replicat rep146ea exttrail D:\\ggoracle\\dirdat\\trail146\\ea,nodbcheckpoint
配置文件rep146ea.prm: /***
REPLICAT rep146ea
USERID coss3,PASSWORD coss3 assumetargetdefs
REPERROR default,discard
DISCARDFILE d:\\ggoracle\\log\\rep146ea.dsc,append,megabytes 200 gettruncates
HANDLECOLLISIONS
BATCHSQL BATCHESPERQUEUE 200, OPSPERBATCH 2000 MAP coss360.per_test, TARGET coss3.per_test, keycols (sampletime, objectid); ***/
3.同步进程的启动和关闭
注意,passive extract(这里是pumpa)不应该被手动启动(手动也无法启动)。在上面的进程创建和配置完成后,正确的启动方式如下: (1)源端start exta,目标端start rep146ea (2)目标端start ext146pa(alias Extract)
(3)在正确的配置下,pumpa会自动启动。Pumpa启动后,同步正常开始。 同样,进程关闭时,无论在源端关闭passive extract或是在目标端关闭alias extract,对应的alias extract和passive extract都会自动关闭。
29
5.6 GoldenGate双向复制(active-active)
双向复制系统架构如下:
GoldenGate双向复制,意即两端数据库互为源数据,无论在哪一端上对业务数据进行操作,都将同步应用到另一端。
5.6.1 双向复制的注意点
1.防止数据循环 双向复制中,最主要的问题是需要防止数据的循环应用。在GoldenGate中,需要从两方面进行预防:
(1)防止Extract进程抓取Replicat进程的SQL操作。
在默认配置下,GoldenGate的Extract进程会忽略捕获由Replicat执行的SQL操作(Teradata除外,需要进行额外配置),所以这部分一般不需要额外设置。 (2)使Extract进程识别本地Replicat执行的DML事务,并进行忽略。 这步在Oracle(10g and later)中的配置为在Extract进程加入参数:
TRANLOGOPTIONS EXCLUDEUSER
不同的数据库这里需要配置的参数不同。如果是Oracle 9i或之前的版本,需要配置tracetable。
2.防止数据冲突 由于是双向复制,那么当两端都对同一数据进行操作时,就会发生冲突。比如同时对某行数据进行修改,修改的操作将会被覆盖(视LAG以及事务的先后);又比如两端插入或删除相同键值的数据。 对于这类数据冲突,最好是在业务应用层解决。比如,可以划分两端数据库应用的业务范围,一部分数据只在一端修改维护,另一端则修改维护其他数据;在两端定义不同的键值生成策略;关注同步表上的触发器和on delete cascade约束。也可以借助GoldenGate的映射和过滤功能,对于两端同步的数据进行区分。 总之,在配置双向复制环境时,需要综合考虑当时业务情况,一般都需要在应用层进行适当的修改,以防止数据冲突带来的数据丢失和不一致。
30
5.6.2 双向配置示例
这个示例中,ggdba用户作为GoldenGate专用用户,ddw和ddws分别为两端数据库需要同步的schema(也可以同名,这里是为了便于区别),通过在两端Extract中配置排除ggdba的操作防止循环应用。以下ddw结尾的进程均在ddw用户所在数据库,ddws结尾的进程均在ddws用户所在数据库。
(1) ddw==>ddws
添加提取进程:
GGSCI> add extract extddw,tranlog,begin now /***
extract extddw userid ggdba,password ggdba exttrail E:\\ggoracle\\dirdat\\e1
tranlogoptions excludeuser ggdba --排除捕获ggdba dynamicresolution gettruncates TABLE ddw.*; ***/
GGSCI> add exttrail E:\\ggoracle\\dirdat\\e1, extract extddw
添加datapump:
GGSCI> add extract pumpddw,exttrailsource E:\\ggoracle\\dirdat\\e1,begin now /***
extract pumpddw
userid ggdba,password ggdba
rmthost 192.168.1.101, mgrport 7801 rmttrail E:\\ggoracle\\dirdat\\rep\\e1 PASSTHRU gettruncates table ddw.*; ***/
GGSCI> add rmttrail E:\\ggoracle\\dirdat\\rep\\e1, extract pumpddw
添加复制应用进程
GGSCI> add replicat repddws,exttrail E:\\ggoracle\\dirdat\\rep\\e1, nodbcheckpoint /***
replicat repddws userid ggdba,password ggdba ASSUMETARGETDEFS reperror default,discard
discardfile E:\\ggoracle\\log\\repddws.dsc,append,megabytes 200
31
gettruncates
HANDLECOLLISIONS
MAP ddw.*, TARGET ddws.*; ***/
(2) ddws==>ddw
添加提取进程:
GGSCI> add extract extddws,tranlog,begin now /***
extract extddws userid ggdba,password ggdba exttrail E:\\ggoracle\\dirdat\\e2
tranlogoptions excludeuser ggdba --排除捕获ggdba dynamicresolution gettruncates TABLE ddws.*; ***/
GGSCI> add exttrail E:\\ggoracle\\dirdat\\e2, extract extddws
添加datapump:
GGSCI> add extract pumpddws,exttrailsource E:\\ggoracle\\dirdat\\e2,begin now /***
extract pumpddws
userid ggdba,password ggdba
rmthost 192.168.1.101, mgrport 7801 rmttrail E:\\ggoracle\\dirdat\\rep\\e2 PASSTHRU gettruncates table ddws.*; ***/
GGSCI> add rmttrail E:\\ggoracle\\dirdat\\rep\\e2, extract pumpddws
添加复制应用进程:
GGSCI> add replicat repddw,exttrail E:\\ggoracle\\dirdat\\rep\\e2, nodbcheckpoint /***
replicat repddw userid ggdba,password ggdba ASSUMETARGETDEFS reperror default,discard
discardfile E:\\ggoracle\\log\\repddw.dsc,append,megabytes 200 gettruncates
HANDLECOLLISIONS
32
相关推荐: