作者简介


桑凯

现任职于云和恩墨,具有多年 Oracle 数据库企业级运维经验,擅长容灾项目解决方案设计,作为项目经理负责多个基于 Oracle DataGuard 和 GoldenGate 的双中心的数据库容灾项目实施,积累了丰富的数据库应用级容灾整体架构的设计经验。


本文由恩墨大讲堂148期线上分享整理而成。

1
背景

GoldenGate 的 Direct Initial load 常用于用于异构环境的初始化数据,也可以用于某些生产环境到测试环境的数据同步。初始化的同步过程一般只需要在 GoldenGate 上配置即可无需 DBA 进行参与,使用 Direct Initial load 处理某些数据表不一致后重新同步也非常方便,仅需要将想要同步表配置如参数启动进程即可完成表数据库的同步。

2
GoldenGate (OGG) 初始化数据的种类

2.1. Extract 和 Replicat 进程的两种工作模式

  • Initial Load — 初始数据的加载( special run、 batch run)

    一般用于异构环境下的数据加载,初始化过程文件可以落地也可以选择不落地,抽取的方式就是将需要初始化的数据查询出来保存成 OGG 或者目标数据库可以识别的格式。

  • Change Data Capture (CDC) — 增量数据的抽取

    配合初始化数据库,完成整个初始化中增量数据的同步。

2.2. initial load 的四种工作模式

目标端数据落地

  • File to replicat (Extract writes to a file that Replicat applies)

    该方式利用 OGG 的 Initial Load Extract 进程将需要抽取的数据先进行解析生成 OGG 的 Trail 文件,然后将解析生成的文件传输到目标端主机的 OGG 指定的目录里,再由 OGG 的 Replicat 进行解析插入到目标数据库的对应表里。

  • File to database utility (Extract writes to a file formatted for a DB bulk loadutility)

    该方式源端进程解析数据库数据,通过 FORMATASCII 参数控制抽取最终生成目标端数据库可以识别使用的 ASCII 文件,也就是文本文件。目标端使用自己数据库提供的数据加载程序进行数据加载完成初始数据,这种方式加载数据一般应用于异构的环境,比如 Oracle 到 IBM 数据库之间加载,Oracle 到 SQL Server 间。

目标端数据不落地

  • Direct Load (Extract sends data directly to Replicat)

    采用不落地的方式 Initial load extract 和 Initial load replicat 进程之间直接进行传输数据,在目标端没有 collertor 进程负责收集源端发送的 tail 文件。而目标端落地方式当 mgr 进程启动的时候会自动启动一个 collector 进程进行接收源端 pump 进程传输过来的 tail 文件。

  • Direct load 的配置方式如下:

    ADD EXTRACT <name>, SOURCEISTABLE

    Extract parameters:

    RMTTASK REPLICAT, GROUP <name>

    ADD REPLICAT <name>, SPECIALRUN

    两边的 group name 要对应上

  • Direct bulk load (Replicat uses Oracle SQL*Loader API)

    这种方式仅仅支持 Oracle 间的同步,同样也不会落地文件 Initial load replicat 进程直接调用 SQL*LOADER API进行数据入库,复制端使用 bulkload 参数。

2.3. 初始化方式适用场景总结


3

实验步骤

Direct Initial load 操作步骤较多,文章中仅对关键步骤进行讲解说明详细操作步骤可以通过以下链接下载课程对应视频:https://share.weiyun.com/f9e06940c89cb00785c7514a3f326d10

3.1 两端同时创建表


CREATE TABLE sky.t1 (id NUMBER);

--创建主键注意两边都要创建

alter table sky.t1 add primarykey(id);

--增加附加日志

ggsic

dblogin userid goldengate,passwordgoldengate;

add trandata sky.*

3.2 模拟数据插入脚本 

SQLPLUS 下执行如下语句模拟不断执行数据插入

begin

for i in 90000..10000000

loop

insert into sky.t1 values(i);

commit;

if mod(i,100) = 0 then

dbms_lock.sleep(3);

end if;

end loop;

end;

3.3 源端进程配置

  • 增加源端 CDC 进程

ADD EXTRACT cdcext1, TRANLOG, BEGIN NOW

ADD RMTTRAIL ./dirdat/zz, EXTRACT cdcext1

  • 增加源端 CDC 进程配置文件

EXTRACT cdcext1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID goldengate, PASSWORD goldengate

RMTHOST 192.168.56.120, MGRPORT 7809

RMTTRAIL ./dirdat/zz

TABLE sky.t1

  • 增加源端的 INIT 进程

add extract initext,source is table

  • 增加源端 INIT 进程配置文件

extract initext

userid goldengate, password goldengate

rmthost 192.168.56.120, mgrport 7809

rmttask replicat,group initrep

table sky.t1;

3.4 目标端进程配置


  • 增加目标端 CDC 进程

add replicat cdcrep1, exttrail./dirdat/zz nodbcheckpoint

  • 增加目标端 CDC 进程配置文件

REPLICAT cdcrep1

HANDLECOLLISIONS

ASSUMETARGETDEFS

USERID goldengate, PASSWORDgoldengate

MAP sky.t1, TARGET sky.t1;

注意进程中关键的侧参数 HANDLECOLLISIONS。

  • 增加目标端 INIT 进程

add replicat initrep,specialrun

  • 增加目标端 INIT 进程配置文件

replicat initrep

ASSUMETARGETDEFS

DISCARDFILE ./dirrpt/repint1.dsc, APPEND, MEGABYTES 100

userid goldengate, password goldengate

MAP sky.t1, TARGET sky.t1;

3.5 同步过程

  • 源端数据库执行数据生成 SQL 语句

begin

for i in90000..10000000

loop

insertinto sky.t1 values(i);

commit;

ifmod(i,100) = 0 then

dbms_lock.sleep(3);

end if;

end loop;

end;

/

  • 源端 OGG 启动 CDC 捕获进程

start extract cdcext1

  • 源端启动 initialload 初始化进程

start extract initext

  • 等待初始环境完成自动关闭后,目标端启动 CDC 复制进

start replicat cdcrep1

  • 等待 CDC 复制进程执行的时间点超过初始化进程结束的时间点后,关闭复制端CDC 进程取消 HANDLECOLLISIONS 参数

send replicat cdcrep1 nohandlecollisions

4. Oracle To Oracle 初始化的关键注意点

  • 确保能成功打开库级和表级附加日志的

  • 考虑是否配置 DDL 和序列的复制

  • 初始化过程中源库没有 DDL 操作

  • 如果用数据导入导出进行在线初始化,确保回滚段不会失效

  • 目标库不能有引起数据变化的因素(触发器、 job、级联删除约束)

  • Scheduler:如果是导入导出进行初始化,源端中的非系统 scheduler 必须 disable,否则这些 Scheduler 会在导入后立刻自动运行;如果使用 RMAN 初始化数据,可以在目标重构过程中(open 之前)在目标上要 disable,可以在 upgrade 模式下 disable)

  • 源端开始备份或者 EXP 的时候,确保这时 DB 中没有 start_time 是在启动 extract 进程之前的事务。

执行目标初始化过程中,必须保证做源端数据导出时,当时所有数据库中交易是在 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 启动时间早的事务需要等这些事务结束,才可以开始执行备份。

4
总结

本课程主要介绍了 Direct Initial load 在生产环境快速同步数据表有很高的效率,配合 CDC 进程完成一致性的初始化,我们可以快速的在测试环境构建,数据装载测试等各种环境很好的使用该功能。

另外在 OGG 初始化过程中注意文中提到的关键点,能够在有效杜绝在初始化完成后 OGG 同步过程的数据不一致问题。


资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017DTC大会PPT

‘DBALIFE’,“DBA的一天”海报

‘DBA04’,DBA手记4经典篇章电子书

‘RACV1’, RAC系列课程视频及ppt

‘122ARCH’,Oracle 12.2体系结构图

‘2017OOW’,Oracle OpenWorld资料

‘PRELECTION’,大讲堂讲师课程资料

使用 Direct Initial Load 初始化 GoldenGate 同步数据相关推荐

  1. oracle如何增加initial,golden gate 加initial load 在rac 上的配置

    前言 goldengate 11g 在oracle 11g rac 上的配置 (源是rac+asm , 目标是单数据库实例) 源端: 1. 配置tnsnames [oracle@rac1 admin] ...

  2. 同步数据_体验GoldenGate 18C数据同步到ADW

    ADW的厉害,我们之前的文章都已经说过很多了,Oracle最新发布的GoldenGate 18C可以把本地或是云端数据库的数据变化实时同步到ADW中.前段时间一直在研究这个课题,但是一直不成功,猜想过 ...

  3. [sdx12] SDX12 IPA初始化出现Direct firmware load for ipa/ipa_fws.elf failed with error -2问题分析

    IPA初始化log [ 0.195547] IPA framework init [ 0.211494] IPA clients manager init [ 0.211501] ipa_usb dr ...

  4. MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现

    本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现. 实现步骤 (1)安装MySQL (2)开启MySQL binl ...

  5. ORACLE(Linux版本)实时同步数据到MYSQL(Windows版本)解决方案:OGG

    OGG:Oracle GoldenGate 目录 1.源库(100.100.100.210)与目标库(100.100.100.211)环境 源库环境:Oracle 11.2.0.1.0 + Red H ...

  6. ORACLE(Linux版本)实时同步数据到MYSQL(Linux版本)解决方案:OGG

    OGG:Oracle GoldenGate 目录 1.源库与目标库环境(这里是部署到同一台服务器上) 源库环境:Oracle 11.2.0.1.0 + Red Hat Enterprise Linux ...

  7. Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据...

    转自:http://www.letiantian.me/2014-06-16-dynamo-algorithm-protocol/ Dynamo是Amazon的一个分布式的键值系统,P2P架构,没有主 ...

  8. mysql 定时同步数据_MySQL数据同步之otter

    一.otter介绍 基于日志数据,用于MySQL或者ORACLE之间准实时同步数据. 用途: mysql/oracle互相同步 中间表/行记录同步 二.原理及架构图 otter整体模块 manager ...

  9. Initial load DNL_CUST_PROD0 并找出SAP S4表和CRM表的mapping关系

    目标: Debug Outbound queue找出从Q7Q发送到QDD的数据. Debug Inbound queue找出接受Q7Q传过来的数据,如何转换的. Outbound queue 前提: ...

最新文章

  1. console.log 如何打印对象
  2. 这三大“监控系统”是机房重中之重?
  3. 增强:MB1A物料价格检查
  4. 计算机的教学中作用是什么,发挥计算机在教学中应有的作用
  5. @大学生,送给步入大学生活的你,高速学编程。
  6. 利用Xapian构建自己的搜索引擎
  7. Java中大数据数组,Java基础学习笔记之数组详解
  8. 【MYSQL笔记】分组计算多表查询
  9. 系统科学论(新三论、老三论)漫谈
  10. html实现登录界面
  11. 教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!
  12. Java猜数字小游戏
  13. 磊科全功能路由器上网行为管理配置指南 -- 路由器
  14. 221.Beta多样性PCoA和NMDS排序
  15. 双稳态电路的两个稳定状态是什么_干货 | 常见的脉冲电路到底有何用途和特点?终于了解了!...
  16. 推荐一些有趣的在线编程游戏
  17. 力扣121题 “买卖股票的最 佳时机”
  18. 推荐一个支付系统技术大全的博主--凤凰牌老熊
  19. 轻院2218: 小明的数字游戏( 给你n个数字,把这n个数字拼接起来,最大能拼出的数字是多少?)
  20. PyTorch ResNet 实现图片分类

热门文章

  1. :继续教育学习助手_我们自己做:教育的开放组织
  2. 云中台技术架构_为什么开放基础架构在云中很重要
  3. Bootstrap 固定导航条
  4. es6 属性名表达式
  5. spin协议 matlab 仿真,无线传感器总结复习资料02016学生
  6. linux用什么剪辑视频教程,Linux 上的开源视频剪辑软件Olive
  7. 手写一个promise用法_手写一个Promise
  8. linux iphone 同步时间,与iPad/iPhone同步
  9. bootstraptable设置行高度_【短柱专题】窗台板为什么要通长设置
  10. 测绘工程所用软件评析