今天OGG出现表数据不同步,入库端接收update和delete语句时出现ORA-01403 错误NO data found
一直同步,排除掉表也无法解决!
解决方法一:
在参数中添加 HANDLECOLLISIONS 当target端缺失delete 、update数据时,target端 自动处理。
停止replicat进程,先将要同步的表mapexclude,然后将在目标端上重新初始化此表,保证源和目标上此表的数据是一致,然后再在replicat进程中将表重新map,启动进程。
HANDLECOLLISIONS参数说明:
HANDLECOLLISIONS是我们使用goldengate过程中常有的一个REPLICAT参数,该参数依赖于主键或唯一索引处理冲突数据,常用于初始化阶段。对于无主键或唯一索引的表无法处理冲突,且可能导致重复记录。注意打开此参数则所有数据错误不管reperror如何配置均不再写discard文件,即所有数据冲突信息被默认规则处理,没有任何日志(则会忽略error mapping数据错误,而且不会报告到discard文件),因此日常复制不建议使用该参数;可予以考虑的特殊场景为只需新增数据,无需复制历史数据。
使用HANDLECOLLISIONS的几个场景:
1、target丢失delete记录(missing delete),忽略该问题并不记录到discardfile
2、target丢失update记录(missing update)
更新的键值是主键=》 update转换成INSERT ,默认情况下插入记录不完整
更新的键值是非主键=》 忽略该问题并不记录到discardfile
3、重复插入已存在的主键值到target表中,这将被replicat转换为UPDATE现有主键值的行的其他非主键列情景1 target丢失delete记录(missing delete) :
解决方法二:
以上方法是针对数据量较小,相对静态的表。而一般在生产环境中遇到大表很少能重新初始化的,此时可以按照以下方法操作:
1.找到该REPLICAT进程的dsc文件
然后打开该文件。
2.将所有no data found的数据在目标库造出,目的是让ogg进程能找到数据。
3.start 进程
4.如果进程abenden,则重复以上操作。
该方法比较保险,但如果出现记录数较多时的话则需花费较长时间。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29863023/viewspace-1465632/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29863023/viewspace-1465632/