merge语句导致的ORA错误分析(r9笔记第67天)

作者: admin 分类: 公众号存档            3 次浏览 发布时间: 2016-07-21 23:33

公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2016-07-21 23:33:52 · 原文链接

      最近处理了好几起关于merge导致的问题,其实看到merge语句内心也还是蛮纠结的,这一次还是碰到了问题,简直无语了。          先交代下问题的背景。有一套OLTP环境和OLAP环境需要同步一部分数据,都是在每天的半夜开始,OLAP的库的一个表数据会根据增量的逻辑从OLTP库中同步,有两种方式,一种是OLAP从OLTP中去抓取,另外一种是OLTP推送给OLAP。看起来表达的意思是差不多的,实现起来就是完全不同的风格,即一种主动一种被动,而对于大部分的应用需求来看,还是更倾向于OLAP从OLTP中去抓取这种方式,要不OLTP端还是存在一定的耦合度。     

     但是目前的情况是OLTP主动推送给OLAP,当然这种设计方式看来达到的效果都是一致的,而且因为历史原因,也是一直这么用的。
   在一次升级以后,借着升级的机会,而且很巧又碰到了老版本兼容merge语句的问题(又是merge),所以就自然而然想一并做个改进,把这个问题规范起来。    改进以后,OLAP会从OLTP中抓取数据,原来的逻辑完全不用修改,只是在两个表关联的地方,使用到了DB link来处理,所以代码层面可以认为是没有其它的变化,而且在部署到OLAP端后,我创建了一个小表还测试了一把,没有发现问题,所以简单修改配置之后,就部署完成了,还给开发的同事讲解了这个改进的意义,自己也还是蛮高兴的。
    第二天同事就主动找我,说增量数据没有同步过来,带着程序员最常用的口吻“不可能啊”,“我这里运行都好好的”之类的想法,我查看了后台的JOB运行日志,结果发现日志中竟然抛出了一个ORA错误。
ORA-30926: unable to get a stable set of rows in the source tables
ORA-06512: at line 32
这个错误看起来似懂非懂,比较模糊,初步感觉是表结构哪里出现了不一致的情况。
实现的大体思路如下:
insert into test.tmp_usercenter select *from xxx@OLAP where xxxx; –通过这种方式获得增量数据

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注