GoldenGate同步解决方案及性能测试

上传人:人*** 文档编号:511784313 上传时间:2023-05-02 格式:DOC 页数:25 大小:764KB
返回 下载 相关 举报
GoldenGate同步解决方案及性能测试_第1页
第1页 / 共25页
GoldenGate同步解决方案及性能测试_第2页
第2页 / 共25页
GoldenGate同步解决方案及性能测试_第3页
第3页 / 共25页
GoldenGate同步解决方案及性能测试_第4页
第4页 / 共25页
GoldenGate同步解决方案及性能测试_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《GoldenGate同步解决方案及性能测试》由会员分享,可在线阅读,更多相关《GoldenGate同步解决方案及性能测试(25页珍藏版)》请在金锄头文库上搜索。

1、GoldenGate同步解决方案及性能测试目录1、GoldenGate同步方案21.1 使用GoldenGate初始化加载21.2一对多数据同步(广播复制)41.3多对一数据同步(集中复制)51.4数据转换和过滤61.5关于目标端高数据安全性下的GoldenGate配置方案101.6GoldenGate双向复制(active-active)132、GoldenGate数据同步性能测试162.1 测试中主要监测数据和监测方式162.2 测试脚本和GoldenGate配置172.3 测试步骤212.4 性能测试结果231、GoldenGate同步方案GoldenGate工具虽小,但它提供表级字段级

2、同步映射,而且同步性能优异、资源消耗低,使它的灵活性很强,可以提供多种数据同步、冗灾的解决方案。1.1 使用GoldenGate初始化加载这里所指的GoldenGate初始化加载,只是它指提供的direct load方式,因为其他几种官方介绍的初始化方式要么需要借助其他数据库工具(如extract-SQL*Loader),要么中间走了完全没必要的步骤导致性能很差(如extract-file-replicat方式),都不算纯正的GoldenGate方式。初始化加载架构:上图中,显示了初始化加载启用了两条同步路线:上面一条是真正的initial load,负责将源数据端的数据一次性发送到目标数据库

3、;下面一条,其实就是普通的GoldenGate同步进程,负责抓取初始化加载时源端数据库进行的在线数据变化。因为在实际应用中,往往需要在生产库(源数据库)不停机的状态下,将数据加载到备用数据库(目标数据库)中并应用实时同步,在数据初始化的过程中,生产库将继续进行正常的事务操作,所以此时需要有抓取进程在初始化时开始将这些变化捕获,以免数据丢失。实际部署时需要注意正确的执行顺序,大致可以分为以下几步:(1) 源端和目标端创建配置各个同步进程。(2) 开启源端同步抓取进程(图上的Change Extract),开始捕获变化。(3) 开启初始化进程(图上的Initial-Load Extract),开始

4、数据初始化加载。(4) 等初始化加载结束,开启目标端复制应用进程(图上的Change Replicat),开始实时同步应用。在目标端复制应用进程(图上的Change Replicat)中,需要在参数文件中配置HANDLECOLLISIONS参数,以避免重复应用第2和第3步之间的数据变化,因为这部分数据已经包含在初始化加载中传到目标数据库中了。在这里需要特别提醒的一个概念上的问题,GoldenGate的初始化同步不会也不需要去初始化目标端的SCN号。这个问题在我与多位数据库DBA的交流中发现,他们往往以为GoldenGate是通过SCN来判断数据的应用情况的。GoldenGate的同步与Stre

5、ams不同,它不需要依赖两端数据库保持一致的SCN来应用同步,实际上它只在抓取时可能会与数据库的SCN有关联(抓取时可以指定源数据库的特定SCN号开始解析日志),在trail传输以及目标端应用时,都和源端数据库的SCN毫无关系。它的实质是通过自己的一套队列文件检查点机制来实现队列数据的管理,在目标端则通过数据的唯一键来定位数据行,trail文件最终解析成SQL语句在目标端数据库执行而实现数据的应用。所以这里的初始化加载,完全可以使用其他数据库工具来实现,比如说exp/imp、SQL*Loader、RMAN复制数据库等。以下为一个简单的初始化加载的例子,对于实时同步配置同上面介绍的是一样的,这里

6、不再说明,只列出初始化加载部分的进程配置。1.1.1 GoldenGate初始化加载示例(direct load方式)源端添加提取进程:GGSCI add extract ext1,sourceistable -没有tranlog,意味着不是通过日志方式;没有begin XXX,表示还未启动;使用sourceistable参数不会使用检查点机制配置文件如下:/*extract ext1userid ddw,password ddwrmthost 192.168.0.44, mgrport 7401rmttask replicat, group rept1 -注意是rmttask,指定目标复制进

7、程名table ddw.test;*/不需要为该进程添加远端队列(rmttrail)。目标端添加复制应用进程:add replicat rept1,specialrun -表示一次性加载/*replicat rept1assumetargetdefsuserid ddw,password ddwreperror default, discard discardfile D:reptmy.dsc,append,megabytes 100 INSERTAPPEND-使用直接路径加载,提高加载速度HANDLECOLLISIONS-当目标端已有数据时,略过重复数据错误MAP ddw.test, TAR

8、GET ddw.test1;*/注意,这里的extract和replicat进程添加完后在info all中看不到这个进程,但是view report可以跟踪到。要开始加载,在源端执行:GGSCIstart exttmy目标端的replicat进程不需要去启动,会自动进行数据应用。1.1.2 与Oracle数据泵数据加载速度的比较按照5.6.1示例中的配置,对一张600万行数据的测试表进行初始化加载,完全加载结束大约需要50分钟。使用Oracle 10g的数据泵工具对同样的表,通过DB Link的方式进行初始化加载:C:impdp ddw/ddworcl job_name=zhouimp ta

9、bles=test CONTENT=DATA_ONLY network_link=DB148.REGRESS.RDBMS.DEV.US.ORACLE.COM只需要1分半钟就导完了600万行数据。两者的执行效率差别太大了。所以在一般情况下,尽量使用其他高效的数据库传输工具来完成初始化加载,而不要用GoldenGate提高的初始化功能。1.2一对多数据同步(广播复制)一对多数据同步实现架构:GoldenGate对于多对一的实现方式,就是对于同一个源建立多个提取进程同步进行,也就是说,对应不同的目标端,分别配置同步进程进行同步。配置过程与前面是一样的。这里的多个目标端,有可能对应不同的数据库,也有可

10、能是同一个库中的不同对象。如果是同步到同一个库中的不同对象,除了分别配置同步进程以外,有时候也可以在一个进程中完成,比如,可以在复制端如此配置:/*REPLICAT rep146e1USERID coss3,PASSWORD coss3assumetargetdefsREPERROR default,discardDISCARDFILE d:ggoraclelogrep146e1.dsc,append,megabytes 200HANDLECOLLISIONSMAP ddw.test, TARGET ddw.test1;MAP ddw.test, TARGET ddw.test2;-同一张表同

11、时对应多个表MAP ddw.test, TARGET ddw.test3;*/当然,如果同步数据负载较大的情况下,还是建议在进程级别分开。1.3多对一数据同步(集中复制)多对一数据同步架构:多对一数据同步实现方式同一对多,也是将extract-replicat将进程拆分成多个。多对一同步需要注意的是,所有源端和目标端的表都应该使用一致的主键约束,而且在不同的源端不应该对同一键值的数据进行维护。也就是说,需要在业务上将不同源的数据隔离开来,以防止对同一数据的覆盖更改等问题。一般用于维护业务的区域性数据、然后统一同步到业务中心数据源的业务场景。还有一个需要注意的方面是TRUCATE的捕获,在多对一

12、的配置下应避免捕获。因为GoldenGate处理TRUNCATE同步是直接传输了这个语句,并不会提供具体删除的数据信息(没有REDO也无法提供),所以无论哪个源端执行了TRUNCATE,如果同步到了目标端,都会直接把目标端的表数据直接删光,无论目标数据是否是来源于这个源,造成数据的不一致。1.4数据转换和过滤GlodenGate中支持字段映射、数据筛选转换,以及调用执行数据库脚本或者SQL语句等,在一定条件下,甚至可以实现实时ETL的功能。1.4.1 字段映射GoldenGate中字段的映射一般配置在复制应用端的MAP参数中,字段映射要求两边尽量一致的字段的类型,当然也允许CHARVARCHA

13、R之类的转换。对于不同字段类型的映射,最好详细参考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); -USEDEFAU

14、LTS表示自动映射同名字段MAP ddw.a3test, target ddw.a4test; -不同的表映射,不同的mapMAP “ddw.a5test”, target “ddw.a6test”;-在有些大小写敏感的数据源需要引号区分大小写*/例子3:/*MAP ddw.a1test, target ddw.a2test,COLMAP (USEDEFAULTS, num = 111, name = abc, now_date =DATENOW();-字段指定固定值,注意字符值加引号,数字值不可加引号;DATENOW()表示当前系统时间*/例子4:/*MAP ddw.a1test, targ

15、et 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开头的表*/1.4.2 字段和数据筛选GoldenGate中字段的筛选一般都在TABLE参数中配置(目标端是在MAP参数)。一般推荐在源端extract进程配置文件中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号