[发明专利]一种Oracle数据库同步环境下批量主键更新处理方法及系统有效
申请号: | 202110636234.5 | 申请日: | 2021-06-08 |
公开(公告)号: | CN113282600B | 公开(公告)日: | 2022-08-30 |
发明(设计)人: | 王县玲;高志会;陈勇铨;周华 | 申请(专利权)人: | 上海英方软件股份有限公司 |
主分类号: | G06F16/23 | 分类号: | G06F16/23;G06F16/2455;G06F16/27 |
代理公司: | 上海国智知识产权代理事务所(普通合伙) 31274 | 代理人: | 潘建玲 |
地址: | 200011 上海市黄*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 oracle 数据库 同步 环境 批量 主键 更新 处理 方法 系统 | ||
本发明公开了一种Oracle数据库同步环境下批量主键更新处理方法及系统,该方法包括:步骤S1,当源端执行批量主键更新操作时,备端根据源端的批量主键更新操作解析成URP序列;步骤S2,对所述URP序列的第一条URP操作执行普通URP操作处理;步骤S3,依序执行下一条URP操作,以该URP操作中的源键值查询冲突历史,在查询到有记录且该记录的源Rowid与当前URP操作的源Rowid不一致时,将更新操作变为插入操作,当查询到有记录且该记录的源Rowid与当前URP操作的源Rowid一致时,则执行普通URP操作处理。
技术领域
本发明涉及Oracle数据库同步技术领域,特别是涉及一种Oracle数据库同步环境下批量主键更新处理方法及系统。
背景技术
Oracle数据库是使用非常广泛的计算机软件,在生产环境中为了满足容灾和读写分离等需求,经常会部署数据库同步软件,将源库实时同步到目标库。源库的数据在实时变化,目标库也随之实时更新。在此需先说明的是,为了方便描述处理过程,后续的描述则将记录的修改,删除和插入操作分别标记为URP(Update Row Piece)、DRP(Delete RowPiece)和IRP(Insert Row Piece)。
目前的Oracle数据库同步软件,当源库修改主键时,经常会出现以下几种情况:
1)在生产端,即源库,当通过创建表语句create table tab1(key1 int primarykey,age number,name varchar2(10))创建了表tab1,假设现往表中插入了十五条数据,使用‘Update tab1 set key1=key1+1 where key110’类似语句同时更新多条符合where条件的记录,因为在源库是一次性执行,不会引起问题,但是在目标库,因为Oracle同步软件抓取到redo数据中的多行数据更改,但是不能解析出原始数据中的where条件,不能把where条件拼凑成一条语句,而是解析成一行一行的sql语句去执行,这就会引起目标端装载的主键冲突。例如:当备端执行解析出来的第一行语句修改主键key1字段的记录值11为12时,因为备端原始记录里面已经存在key1的值为12这条记录,这时就会产生主键冲突,此时虽然可以打开备库表的延迟约束选项,使得第一条语句可以顺利执行,但是在第一条记录已经产生重复键值的情况下,后面的更新语句将无法定位正确的记录,从技术上,虽然现有技术可以通过全字段索引+延迟约束装载临时去解决该问题,但是这个前提是开启全字段附加日志和延迟约束,然而首先开启全字段附加日志在生产上会使性能大大降低,生产上不太可能开全字段附加日志,其次,开延迟约束装载时万一在事务结束时还有冲突,整个事务会被回滚,比如备库有更改,代价是很大的,不好处理;
2)更复杂的情况:假设对于生产端的源库,用户设置了延迟约束装载,可以随意在一个事务中更改主键内容,只要事务提交时不冲突即可,这种情况备库也会开延迟约束,但是主键映射仍旧面临上面的问题。
举例说明:根据建表语句create table tab1(key1 int primary key,agenumber,name varchar2(10))建表tab1,现往该tab1表中插入两条数据:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海英方软件股份有限公司,未经上海英方软件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110636234.5/2.html,转载请声明来源钻瓜专利网。