故障现象:
运维人员反馈:复制进程abended
view report r_ydhl报错:OGG-01151 OGG-01296
故障分析
检查日志和dsc
,看到SQL error提示最大长度是11,Data Overflow数据溢出
询问开发人员故障前对该表做过什么操作?
是否有变更过字段类型,长度等?
答复没有做DDL操作,只做了for update操作。
根据经验OGG-01151 OGG-01296一般是由于主键,索引,字段变更等ddl操作可能引起,dml操作不应该出故障。而且该复制进程已经运行有1年了一直正常没出过问题。
通过logdump查看故障位置:列0的长度是15
仔细核对源端和目标端的字段类型:发现id列确实存在差异。
源端oracle:
目标端sqlserver:
对于sqlserver的id的int类型取值范围如下:不超过10位,而且最大值仅为2147483647,而oracle是38位长度,最大值小于10^126。
根据dsc报错的信息看到id的值11位,明显大于10位了,所以在sqlserver中无法插入,导致报错。
询问开发原先的id值被修改增加了2位长度,然后发现有问题又删掉了。
处理办法:
找到原因后,考虑两个办法:
1.修改sqlserver中的int类型位bigint类型,但由于数据量超过1亿,可能需要超长时间才能修改完成,为不影响业务,暂时不考虑。
2.和业务沟通id长度以后也不会超过10位。以此为了快速恢复ogg同步,通过logdump跳过报错的rba位置,最后恢复正常。
alter replicat r_ydhl,extseqno 784,extrba 246892135
start r_ydhl
info r_ydhl
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。