暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【oracle Goldgate】常事务问题

原创 龙镇君 2023-03-21
379
在使用oracle Goldgate 同步数据或者容灾的时候,
可能会存在常事务的存在,出现断开同步,
以下就给大家讨论下此问题:

l oracle在线日志包含已提交的和未提交的事务,但Goldgate只会将已提交的事务写入到队列文件。因此,针对未提交的事务,特别是未提交的长事务,Goldgate会怎样处理呢?

l 有些长事务是在批处理作业中,需要几个小时才能执行完成,比如晚上跑批的作业。Goldgate在解析过程中,会从这些事务一执行就开始读取在线日志,但这些事务可能会持续很久,
这期间,在线日志可能会切换到归档日志,同时这期间也会有其它事务在执行和提交,如果长事务一直未提交,归档日志又因为定期的rman备份而删除,Goldgate将如何处理?


针对以上情况,Goldgate有2种处理方式,
第一种就是使用正常恢复归档的方式,即恢复Goldgate需要的所有归档日志,可能是从长事务开始的那个归档开始,
这样Goldgate将从事务开始的检查点开始解析;

第二种方式就是使用Bounded Recovery的方式,下面的内容将讨论这种方式。

简单来说,BR(Bounded Recovery )默认的设置是4小时,即每4小时Goldgate抽取进程会做一个检查点,在每个检查点的时间点上,
Goldgate会检查长事务,并将超过4小时的长事务的状态写入到磁盘(如果没有达到4小时,则此事务不会被BR写入),
默认保存在Goldgate安装目录的BR目录下。在每个BR的间隔点,这个操作会一直持续,直到事务提交,或事务回滚。

下面的示例中,我们设置BRINTERVAL为20分钟:

BR BRINTERVAL 20M

下面是针对BR的官方文档描述:

使用磁盘持久化数据用于恢复长事务,使提取过程能够确保捕获性能(尽管捕获延迟仅在极端情况下发生)。
如果提取过程停止,并且某些事务开始的时间比这个时间点早得多,那么系统需要占用大量的日志空间,这也可能发生在这些天
日志文件不在磁盘上或已被删除。此外,由于以下原因,重新开始从早期日志文件读取事务是不可接受的
日志文件中的其他事务已被解析并写入队列文件。

如果通过持久化数据能恢复这些长事务的状态,那么就可以消除这个往返读取的动作。极端的情况下,如果有多个长事务,
如果每个事务都要求从起点重新读取,那么Goldgate的捕获性能将大大降低。

 
在本示例中,我们将BR的间隔设置为20分钟,然后执行一个insert语句,但不提交。
此时,抽取进程会从在线日志的某个点开始读取,在线日志的序号为

然后我们切换几组日志,备份并删除序号为14878的日志文件。我们可以看到每隔20分钟,BR checkpoint就会执行,
此时,长事务的状态信息及数据就会被写入到磁盘上。即使磁盘上没有对应的归档日志文件,抽取进程也不会再去读取这些日志,
而是直接从磁盘上保存的BR数据中进行恢复,如果事务提交,则Goldgate会直接将BR目录下的数据写入到队列中。
 
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论