八月 17th, 2011 @ Kevin.yuan |【转载时请务必以超链接形式标明文章原始出处和作者信息】
当rac节点变更的时候,比如我们添加或者删除了集群中的节点,理所当然会对节点对应的log threads进行添加或者删除,但会造成goldengate的map log threads的顺序发生紊乱。在进行这一类行为变更的时候,特别需要注意goldengate端也需要进行特别处理。
比如,在节点添加之前,goldengate map log threads顺序如下(数据库log thread在后,下同):
1—>1 (假设是sequence 100,rba 1001)
2—>2(假设是sequence 88,rba 3009)
当添加节点后,map log threads的顺序会变成:
1—->3(sequence 88,rba 3009)
2—->1(sequence 100,rba 1001)
3—->2(new)
当ogg重新工作的时候,因为此时map的顺序发生了变化,因此会造成抽取进度出现问题。
【 阅读全文 】
八月 9th, 2011 @ Kevin.yuan |【转载时请务必以超链接形式标明文章原始出处和作者信息】
在oracle-oracle goldengate的复制环境中,有时候会碰到一些紧急的问题一时无法修复,为了避免影响整个复制环境的复制进度,采取跳过错误事务或者跳过特定对象的办法使得goldengate继续同步;如果后续某个表不得不需要重新同步,而且应用是不间断进行事务操作的,在不停止应用和重建整个复制环境的情况下,为了保证数据的一致性,如何在线对特定的问题对象重新初始化和继续同步呢?
处理的办法还是不少的,下面给出一个在replicat端过滤SCN事务的办法,来实现数据的一致同步。
处理的思路就是首先在target上获得该表上某个特定SCN版本上的数据(比如使用导入导出或者数据泵),然后通过filter功能来筛选出该表上大于该commit scn的事务,从而确保事务的一致性。在goldengate v10之后,可以通过@GETENV函数直接获得事务的CSN。
【 阅读全文 】
八月 1st, 2011 @ Kevin.yuan |【转载时请务必以超链接形式标明文章原始出处和作者信息】
在实施goldengate过程中,初始化的方案选择是一个重要的环节,尤其对一个7*24小时的系统环境来讲。一个出色的 goldengate的实施不应该以停机时间作为代价,合适的初始化方法完全可以做到零停机。
如果事务不间断进行,如何保证初始化过程中事务的完整性和数据的准确性呢(静态的初始化环境无需多讲)?实现方法还是多样的,从工作机制上来讲,归纳起来主要有2种。
1. 利用 Keys + Handlecollisions
2.利用 commit SCN/CSN
Handlecollisions参数依赖于表上的Key(Primary key/Unique key)来对数据进行重复行和缺失行的处理,常在数据初始化过程中保证数据的一致性,gg文档上的初始化办法,比如initial load,都是用的这种办法。但是这种办法在实际的工程实施中是有相当大的限制。
首先,该初始化办法性能比较糟糕,对于大型数据库来讲,并不合适。更严重的是,它有很大的缺陷性。(引自metalink doc):
1. When there is primary key update (PKUpdate), the HANDLECOLLISIONS method may lose data. The solution in the case of a primary key update is for Extract to fetch whole row by making a flashback query. However, this is not efficient and may not be possible in certain environments.
2. When a table does not have any type of key, HANDLECOLLISIONS may introduce duplicate rows in the table. One workaround is to add a primary or unique key to the target table.
3. The exact timestamp when the initial load was started may not be known (and different tables may have different start times), so it is almost inevitable that HANDLECOLLISIONS will be used for certain records un-necessarily. This could mask a real data integrity problem.
在实际的工程实施中,个人不推荐使用基于Keys + Handlecollisions模式的初始化办法。
【 阅读全文 】
七月 27th, 2011 @ Kevin.yuan |【转载时请务必以超链接形式标明文章原始出处和作者信息】
Blog一晃半年没有更新了,还真对不起每年交的空间和域名费。
一连实施了好几个goldengate的项目,关注ogg也有好些时日了。这是前不久应客户要求做的goldengate的培训,share一下。因为用户只是应急容灾的应用,因此ogg上的很多功能当时并没有提及。接下来的blog会持续整理goldengate的一些问题和技巧。
【 阅读全文 】