OGG_relicat进程丢数据 handlecolisions个人想法
来源:互联网 发布:网络团购流程 编辑:程序博客网 时间:2024/06/05 17:31
最近接手一套OGG,开发人员抱怨有很多时间点的数据丢失,希望我们排查原因并解决问题。
首先着手了解ogg的功能:确认只开启dml,未开启ddl操作;然手找丢失数据的类型,主要从:
1、stats replicat 进程名字,发现insert、update、delete等dml操作都有操作记录,排除了该OGG不能同步update的猜测;
2、minus对比数据,发现部分表行数一直,但表内容有差别;部分表行数就缺;部分表行数和表内容完全一直。(个人表示萌萌的,毫无规律!)
3、查询丢数据或数据不一致的的时间点,发现时间点比较一致。也就是说都是某一时刻会集中有些insert或是update未能同步;
-----考虑中----
会不会是这样!(灵感突显后的兴奋)
跟源端dba确认,在丢丟数的时间点是否重新初始化过部分表,而且初始化的方式是基于scn的方式。得到的回复是肯定的。 那就明白了。
基于expdp+scn的方式初始化ogg,看似是绝对不会丢数据,但是忽略了数据库长事务问题。倘若做初始化的时刻,因为各种原因源端数据库依然进行着各种事务,并且部分事务是长事务。本来ogg是从在线日志或是归档日志中抽取sql,如果是数据库的长事务ogg处理起来就力不从心了。
找到原因就开始找解决办法了:
两个思路:1、重配,注意scn时刻事务问题,或是直接rman初始化;2,使用handlecolisions参数,配合基于时间点恢复启动replicat进程;
我选择了第二个,原因:
1、这套ogg仅支持dml操作;
2、同步的表均有主键或唯一索引;
3、这样搞不行,还可以再重配;
4、handlecolisions参数性质,很有意思。
使用HANDLECOLLISIONS的几个场景:
1、target丢失delete记录(missing delete),忽略该问题并不记录到discardfile
2、target丢失update记录(missing update)
更新的键值是主键=》 update转换成INSERT ,默认情况下插入记录不完整
更新的键值是非主键=》 忽略该问题并不记录到discardfile
3、重复插入已存在的主键值到target表中,这将被replicat转换为UPDATE现有主键值的行的其他非主键列情景
理解一下上面的话:
丢失的delete不操作,后面跟的操作可能是insert,重复了就转为update,没有问题;如果后面就不做操作了,到时目标端多些数据,删除就好;
丢失的是update非主键,就不做操作,没问题;如果是主键,但一般主键都是标记唯一的sequence,问题也不太大;
丢失的如果是insert,不重复就插入,没问题;如果主键重复就update为新的内容,也没问题。
综上就是对主键update会有问题,可能造成数据的不完整,每个表都看看,并咨询一下开发,貌似不会对主键update。
好,就这么搞了。
再replicat进程配置文件中加入handlecolisions参数,并alter replicat replicat_name,begin 时间。
我把时间提前到该scn(scn去查当时的时间是可查的)的前10分钟,同步发现还是少那个时间点之前的数据。这正实了我的猜想,就是因为长事务问题,导致少数据!好吧,我把时间点移到当天晚上凌晨3点,再同步,发现问题解决了。ok!万事大吉!
---------------------当然上面的一些想法,可能在专家面前是站不住脚的,毕竟学疏才浅,望海涵,指正!
如想沟通技术等问题,请联系 王杰 15314117200
夏家祥 QQ592379255
- OGG_relicat进程丢数据 handlecolisions个人想法
- 个人想法
- 个人想法
- 个人想法
- 个人想法
- 数据访问层实现的一些个人想法
- 关于数据结库候选码的个人想法
- SqlHelper使用[个人想法]
- 项目经理 个人想法
- 【pongo】【修路】【个人想法】
- 一些个人的想法
- 个人的一点想法
- 数据中显示"刚刚、几天前、几天前、几个月"等个人的想法
- 生活随笔:纯粹个人想法
- 2014年个人的想法
- sigslot.h个人的想法
- 进程替换的一点想法
- VC入门的一些个人想法
- 解决unity3d 4.5 编译ios8 横屏问题
- ubuntu QT报错:Cannot mix incompatible Qt library (version 0x40806) with this library (version 0x40801)
- 不怕不知道,就怕不知道——js转义问题
- HR告诉你10种面试被拒的行为
- java学习总结
- OGG_relicat进程丢数据 handlecolisions个人想法
- C#中SelectNodes找不到节点
- 使jpg图片能够透明的一种方法
- 服务器上的文件无法复制到本地,本地也不能上传到服务器
- iOS- CALayer之position、anchorPoint
- 输入整型数组和排序标识,对其元素按照升序或降序进行排序
- poj 1004 Financial Management
- LayoutAnimation简单使用
- eclipse运行报java.lang.OutOfMemoryError: PermGen space解决方法