Oracle-RAC集群不同节点数据查询不一致

前言:

        最近处理一个应用报障,RAC集群数据库在不同的节点查询分区表数据不一致的问题,把处理和分析的过程分享给大家,希望对大家有所帮助。

问题:

        RAC集群不同节点查询同一个分区数据结果不一致问题。

原因:

1 表trade_xxxx_xxxx分区索引trade_xxxx_xxxx_gl在集群不同节点存在数据差异,导致集群不同节点访问该索引的sql查询返回结果不一致。

2 对于分区索引trade_xxxx_xxxx_gl在集群不同节点存在数据差异的根因,目前暂无发现,但是在Oracle的官方上存在类似的问题由于DDL操作导致节点内存维护的分区信息出现错误引发节点分区数据不一致的bug,怀疑很有可能是bug导致的

分析过程:

 在节点一查询表trade_xxxx_xxxx分区20220212,返回0行数据。

节点二查询表trade_xxxx_xxxx分区20220212,返回686693行数据。

执行sql期间,后台并没有ORA错误发生。

使用10053对sql解析过程进行跟踪,sql执行路径在全表扫描以及索引全扫描两者间,选择了cost消耗较低的索引全扫描方式。

测试强制sql走表访问路径,不走索引

节点一访问有数据。

节点二访问也有数据,并且两节点数据一致,都为358665。

到这里,可以确认通过索引trade_xxxx_xxxx_gl访问数据有异常。

通过analyze分析索引没有发现坏块。

analyze index trade_xxxx_xxxx_gl validate structure;

接下来,通过Oracle官方查看是否有匹配当前场景的BUG,没有发现完全匹配的BUG。

但我们可以发现在当前数据库11.2.0.4版本,存在BUG关于RAC节点同一个SQL,同一执行计划分区查询数据结果不同的问题,问题原因为DDL操作导致节点内存维护的分区信息出现错误,进而影响数据的访问,但问题根因Oracle并未进行说明。

所以,对于分区索引trade_xxxx_xxxx_gl在集群不同节点存在数据差异的根因,目前暂无发现,但是在Oracle的官方上存在类似的问题由于DDL操作导致节点内存维护的分区信息出现错误引发节点分区数据不一致的bug,怀疑很有可能是bug导致的

最后,我们对问题索引TRADE_XXXX_XXXX_GL进行了重建。

 再次通过索引查询数据,访问数据正常,问题得到修复。

问题解决:

        

1. 重建索引TRADE_XXXX_XXXX_GL修复问题。

2. 应用最新的psu补丁11.2.0.4.220719,避免潜在的bug。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值