ER复制的原理和机制介绍

ER数据复制的简单示意如下,还有人画过更复杂的一个图,我就不在这里展示了,意思到了即可。

ER复制的数据流向如下,虽然枯燥,请学习ER的同学务必牢记:

日志抓取组件就是snoopy组件,用于读取逻辑日志并把逻辑日志记录放入grouper组件。

grouper组件用于估算用于复制的日志记录,并把这些日志用于分组放到消息里面来---按照事务原始的顺序。

grouper组件把分组好的消息放入发送队列。在特定的情况下,发送队列的转储这些消息到磁盘上用于临时存储。

发送队列通过ER的网络把这些消息传输到ER的目标端;

复制的消息被放入ER目标端的接受队列中;

数据同步组件在目标端应用这些事务,如果有必要就会执行冲突解决策略;

日志被成功应用的消息发送给ACK队列;

ACK的消息被发送给源端。

 

ER复制的内容是什么?

1、ER复制的内容是row image,来源于逻辑日志,但是ER复制一定不是逻辑日志,请各位同学务必记住。在这点上和RSS|HDR都是不一样的。

2、row image包含了在源端的操作涉及的数据行以及在这些数据行的DML操作是什么。句话需要深刻理解!!!为什么呢?

比如源端有100条数据,目标端有200掉数据;在源端执行delete from tabname;在目标端应该怎么呢?其实在目标端只删除在源端删除的100行。换言之,如果源端的100行,根本就不存在于目标端的200行中,则目标端的200行数据是不会被删除的。

发送队列:

ER在内存中存储了需要传送到目标端的复制数据。如果复制队列满了,ER就需要把发送队列的交易记录转储到dbspaces上,把发送队列的数据行转储到sbspaces上。

接受队列:

ER会存储复制数据在内存中直到目标端反馈回ACK的消息。如果接受队列被一个大事务填满了,ER就会转储接受队列的事务头和复制记录到dbspaces上,转储接受队列的行数据到sbspace上。

ER存储数据在一个源端的可回收的发送队列里面,目标端应用或拒绝应用的时候会发送ACK消息出来。

在复制的过程中,如果目标端不可用,则源端的事务会继续执行。等目标端恢复之后,源端会继续从在目标端应用成功的日志位置开始重新发送事务。

 

注意:

只有在目标端应用成功或应用失败之后,目标端才会返回ACK消息的。

如果你想重建复制相关项,重建的名称和原来的名称一致,你必须要先在所有的节点上执行执行cdr check queue成功,然后才能重建。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我曾阿牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值