GoldenGate安装部署及解决方案 下载本文

userid ddw,password ddw

reperror default, discard discardfile D:\\reptmy.dsc,append,megabytes 100

INSERTAPPEND --使用直接路径加载,提高加载速度

HANDLECOLLISIONS --当目标端已有数据时,略过重复数据错误 MAP ddw.test, TARGET ddw.test1; ***/

注意,这里的extract和replicat进程添加完后在info all中看不到这个进程,但是view report可以跟踪到。

要开始加载,在源端执行: GGSCI> start exttmy

目标端的replicat进程不需要去启动,会自动进行数据应用。

5.1.2 与Oracle数据泵数据加载速度的比较

按照5.6.1示例中的配置,对一张600万行数据的测试表进行初始化加载,完全加载结束大约需要50分钟。 使用Oracle 10g的数据泵工具对同样的表,通过DB Link的方式进行初始化加载: C:\\>impdp ddw/ddw@orcl job_name=zhouimp tables=test CONTENT=DATA_ONLY network_link=\

只需要1分半钟就导完了600万行数据。两者的执行效率差别太大了。 所以在一般情况下,尽量使用其他高效的数据库传输工具来完成初始化加载,而不要用GoldenGate提高的初始化功能。

5.2 一对多数据同步(广播复制)

一对多数据同步实现架构:

专业资料

GoldenGate对于多对一的实现方式,就是对于同一个源建立多个提取进程同步进行,也就是说,对应不同的目标端,分别配置同步进程进行同步。配置过程与前面是一样的。

这里的多个目标端,有可能对应不同的数据库,也有可能是同一个库中的不同对象。如果是同步到同一个库中的不同对象,除了分别配置同步进程以外,有时候也可以在一个进程中完成,比如,可以在复制端如此配置: /***

REPLICAT rep146e1

USERID coss3,PASSWORD coss3 assumetargetdefs

REPERROR default,discard

DISCARDFILE d:\\ggoracle\\log\\rep146e1.dsc,append,megabytes 200 HANDLECOLLISIONS

MAP ddw.test, TARGET ddw.test1;

MAP ddw.test, TARGET ddw.test2; --同一张表同时对应多个表 MAP ddw.test, TARGET ddw.test3; ***/

当然,如果同步数据负载较大的情况下,还是建议在进程级别分开。

5.3 多对一数据同步(集中复制)

多对一数据同步架构:

专业资料

多对一数据同步实现方式同一对多,也是将extract-replicat将进程拆分成多个。 多对一同步需要注意的是,所有源端和目标端的表都应该使用一致的主键约束,而且在不同的源端不应该对同一键值的数据进行维护。也就是说,需要在业务上将不同源的数据隔离开来,以防止对同一数据的覆盖更改等问题。一般用于维护业务的区域性数据、然后统一同步到业务中心数据源的业务场景。 还有一个需要注意的方面是TRUCATE的捕获,在多对一的配置下应避免捕获。因为GoldenGate处理TRUNCATE同步是直接传输了这个语句,并不会提供具体删除的数据信息(没有REDO也无法提供),所以无论哪个源端执行了TRUNCATE,如果同步到了目标端,都会直接把目标端的表数据直接删光,无论目标数据是否是来源于这个源,造成数据的不一致。

5.4 数据转换和过滤

GlodenGate中支持字段映射、数据筛选转换,以及调用执行数据库脚本或者SQL语句等,在一定条件下,甚至可以实现实时ETL的功能。

5.4.1 字段映射

GoldenGate中字段的映射一般配置在复制应用端的MAP参数中,字段映射要求两边尽量一致的字段的类型,当然也允许CHAR<->VARCHAR之类的转换。对于不同字段类型的映射,最好详细参考GoldenGate官方文档以得到足够的支持信息,并做好测试验证以防止数据丢失等。以下是字段映射的配置例子: 例子1:

专业资料

/***

MAP ddw.a1test, target ddw.a2test, --target前一定要留个空格,否则会报错 COLMAP (id = id, type1 = type1, sell_date1 = sell_date2); --字段映射配置 ***/

例子2: /***

MAP ddw.a1test, target ddw.a2test,

COLMAP (USEDEFAULTS, sell_date1 = sell_date2); --USEDEFAULTS表示自动映射同名字段 MAP ddw.a3test, target ddw.a4test; --不同的表映射,不同的map

MAP “ddw.a5test”, target “ddw.a6test”; --在有些大小写敏感的数据源需要引号区分大小写

***/

例子3: /***

MAP ddw.a1test, target ddw.a2test,

COLMAP (USEDEFAULTS, num = 111, name = \ @DATENOW()); --字段指定固定值,注意字符值加引号,数字值不可加引号;@DATENOW()表示当前系统时间 ***/

例子4: /***

MAP ddw.a1test, target ddw.a2test, COLMAP (USEDEFAULTS, transaction_date = @DATE (“YYYY-MM-DD”, “YY”, YEAR, “MM”, MONTH, “DD”, DAY),);

--多个字符字段整合转换为目标端的一个时间字段 ***/

在这里顺便插入一个很容易出错的表映射例子: /***

map ddw.a*, target ddw.*; --通配符表示所有a开头的表进行映射,注意的是target后面的表名千万

不能也写成ddw.a*,不然会被映射成目标端aa开头的表 ***/

5.4.2 字段和数据筛选

GoldenGate中字段的筛选一般都在TABLE参数中配置(目标端是在MAP参数)。一般推荐在源端extract进程配置文件中配置,这样可以有效得减小trail文件的大小,减小网络负载。以下是一些筛选配置例子(只列出配置文件的TABLE参数部分)。

专业资料