本文共 4240 字,大约阅读时间需要 14 分钟。
GoldenGate 的 Direct Initial load 常用于用于异构环境的初始化数据,也可以用于某些生产环境到测试环境的数据同步。初始化的同步过程一般只需要在 GoldenGate 上配置即可无需 DBA 进行参与,使用 Direct Initial load 处理某些数据表不一致后重新同步也非常方便,仅需要将想要同步表配置如参数启动进程即可完成表数据库的同步。
GoldenGate (OGG) 初始化数据的种类
2.1. Extract 和 Replicat 进程的两种工作模式
一般用于异构环境下的数据加载,初始化过程文件可以落地也可以选择不落地,抽取的方式就是将需要初始化的数据查询出来保存成 OGG 或者目标数据库可以识别的格式。
配合初始化数据库,完成整个初始化中增量数据的同步。
2.2. initial load 的四种工作模式
目标端数据落地
该方式利用 OGG 的 Initial Load Extract 进程将需要抽取的数据先进行解析生成 OGG 的 Trail 文件,然后将解析生成的文件传输到目标端主机的 OGG 指定的目录里,再由 OGG 的 Replicat 进行解析插入到目标数据库的对应表里。
该方式源端进程解析数据库数据,通过 FORMATASCII 参数控制抽取最终生成目标端数据库可以识别使用的 ASCII 文件,也就是文本文件。目标端使用自己数据库提供的数据加载程序进行数据加载完成初始数据,这种方式加载数据一般应用于异构的环境,比如 Oracle 到 IBM 数据库之间加载,Oracle 到 SQL Server 间。
目标端数据不落地
采用不落地的方式 Initial load extract 和 Initial load replicat 进程之间直接进行传输数据,在目标端没有 collertor 进程负责收集源端发送的 tail 文件。而目标端落地方式当 mgr 进程启动的时候会自动启动一个 collector 进程进行接收源端 pump 进程传输过来的 tail 文件。
ADD EXTRACT <name>, SOURCEISTABLE
Extract parameters:
RMTTASK REPLICAT, GROUP <name>
ADD REPLICAT <name>, SPECIALRUN
两边的 group name 要对应上
这种方式仅仅支持 Oracle 间的同步,同样也不会落地文件 Initial load replicat 进程直接调用 SQL*LOADER API进行数据入库,复制端使用 bulkload 参数。
2.3. 初始化方式适用场景总结
实验步骤
Direct Initial load 操作步骤较多,文章中仅对关键步骤进行讲解说明详细操作步骤可以通过以下链接下载课程对应视频:https://share.weiyun.com/f9e06940c89cb00785c7514a3f326d10
3.1 两端同时创建表
CREATE TABLE sky.t1 (id NUMBER);--创建主键注意两边都要创建alter table sky.t1 add primarykey(id);--增加附加日志ggsicdblogin userid goldengate,passwordgoldengate;add trandata sky.*
3.2 模拟数据插入脚本
SQLPLUS 下执行如下语句模拟不断执行数据插入
beginfor i in 90000..10000000loopinsert into sky.t1 values(i);commit;if mod(i,100) = 0 thendbms_lock.sleep(3);end if;end loop;end;
3.3 源端进程配置
ADD EXTRACT cdcext1, TRANLOG, BEGIN NOWADD RMTTRAIL ./dirdat/zz, EXTRACT cdcext1
EXTRACT cdcext1SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)USERID goldengate, PASSWORD goldengateRMTHOST 192.168.56.120, MGRPORT 7809RMTTRAIL ./dirdat/zzTABLE sky.t1
add extract initext,source is table
extract initextuserid goldengate, password goldengatermthost 192.168.56.120, mgrport 7809rmttask replicat,group initreptable sky.t1;
3.4 目标端进程配置
add replicat cdcrep1, exttrail./dirdat/zz nodbcheckpoint
REPLICAT cdcrep1HANDLECOLLISIONSASSUMETARGETDEFSUSERID goldengate, PASSWORDgoldengateMAP sky.t1, TARGET sky.t1;
注意进程中关键的侧参数 HANDLECOLLISIONS。
add replicat initrep,specialrun
replicat initrepASSUMETARGETDEFSDISCARDFILE ./dirrpt/repint1.dsc, APPEND, MEGABYTES 100userid goldengate, password goldengateMAP sky.t1, TARGET sky.t1;
3.5 同步过程
beginfor i in90000..10000000loopinsertinto sky.t1 values(i);commit;ifmod(i,100) = 0 thendbms_lock.sleep(3);end if;end loop;end;/
start extract cdcext1
start extract initext
start replicat cdcrep1
send replicat cdcrep1 nohandlecollisions
4. Oracle To Oracle 初始化的关键注意点
执行目标初始化过程中,必须保证做源端数据导出时,当时所有数据库中交易是在 extract 启动检查点后才开始,否则这些交易在 extract 启动检查点前的部分数据将会丢失。
可以通过查看 v$transaction 的 min(START_TIME) 应当大于 extract 开始时间来验证在取 SCN 号时,先执行:select start_time from gv$transaction where to_date(start_time, ‘yyyy-mm-ddhh24:mi:ss’)<to_date(‘extract 启动时间','yyyy-mm-dd hh24:mi:ss');通过该语句,如果找到比 extract 启动时间早的事务需要等这些事务结束,才可以开始执行备份。
总结
本课程主要介绍了 Direct Initial load 在生产环境快速同步数据表有很高的效率,配合 CDC 进程完成一致性的初始化,我们可以快速的在测试环境构建,数据装载测试等各种环境很好的使用该功能。
另外在 OGG 初始化过程中注意文中提到的关键点,能够在有效杜绝在初始化完成后 OGG 同步过程的数据不一致问题。
原文发布时间为:2018-03-5
本文作者:桑凯
本文来自云栖社区合作伙伴“”,了解相关信息可以关注“”微信公众号
转载地址:http://mvzdx.baihongyu.com/