文档详情

Oraclestreams双库同步的冲突处理方法

ji****81
实名认证
店铺
DOCX
91.21KB
约6页
文档ID:315369436
Oraclestreams双库同步的冲突处理方法_第1页
1/6

          Oraclestreams双库同步的冲突处理方法                    顾鹏程摘 要Oracle Streams是Oracle官方提供的一种免费、灵活的数据库同步机制,只需通过配置官方的存储过程即可部署由冲突事务导致的稳定性不足,是Streams部署中最难以处理的问题Oracle建议的常规的冲突处理方法需要按表綁定存储过程,不利于处理新表冲突,其提供的自定义冲突处理存储过程功能较为简单,适用性低本文针对Streams双向同步中常见的冲突,提出一种不需要绑定表且具有一般适用性的冲突处理部署方法,能够自动化处理错误事务,实验证明该方法具备一定的可靠性关键词】Oracle Streams 冲突处理 错误事务Oracle Streams 是 Oracle提供的流复制技术,可以实现数据容灾和数据共享其基本思想来源于 Oracle 高级队列,是其应用的延伸,它还可以传递消息队列,具有免费、灵活的优势其缺点是稳定性差在生产实践中,主要发现有两种冲突影响Streams同步,分别为删除冲突和更新冲突,均由被修改行在目标数据库找不到对应记录导致对于删除冲突,一般Oracle建议采取对目标行标记的方法,但这会导致两个数据库不一致。

对于更新冲突,Oracle提供了预置的自动存储过程来作简单的处理该存储过程需要指定参数表名、方法名等,配置繁琐此外,Oracle还提供自定义存储过程来配置删除或更新冲突该方法需要指定表名以及对应的存储过程,需要对每张表进行设定,这不利于对新增表的维护对于这些问题,本文提出一种结合Oracle定时任务和不需要绑定表的自定义存储过程的方法,让Oracle自动修正冲突,以确保两个数据库的一致性1 定制处理冲突的存储过程处理冲突的存储过程本质上是根据发生streams同步错误的事务号,找到对应冲事务LCR,结合错误类型,调整LCR中的事务内容,使其正确执行1.1 处理删除冲突的存储过程有两种方式处理这种冲突:(1)可以选择不使用事务在物理上删除行,而是更新一个“删除”列,将行表标记为“已删除”,这样不会发生删除冲突,但可能引发更新冲突,需要另置存储过程处理2)可以简单的舍弃掉删除失败的事务,并移除错误,使后续同步继续本文以第二种方法为例实现存储过程首先通过DBMS_APPLY_ADM.GET_ERROR_MESSAGE存储过程获得错误事务的LCR,然后用GET_COMMAND_TYPE函数可以获得该操作的增、删、改类型。

舍弃该删除操作其实就意味着直接移除事务,执行DBMS_APPLY_ADM.DELETE_ERROR,最后让同步重新启动:DBMS_APPLY_ADM.START_APPLY1.2 处理更新冲突的存储过程考虑在生产环境中,一个更新冲突往往意味着目标数据库缺失对应记录,因此,本文采用将更新事务的LCR修改为插入事务的方式同时为了避免插入事务在双向同步中反同步到源数据库,将为Oracle会话增加一个标记,使同步忽略来自标记事务获取错误事[本文来自于WWW.zz-news.cOM]务LCR以及事务类型的方式与上一节相同下面假设错误事务已被判别为DML操作中的UPDATE类型首先调用DBMS_STREAMS_ADM.SET_TAG存储过程为该会话加一个标记,本文采取十六进制0作为标记这样存储过程中的事务将不会被复制到另一个数据库由于更新语句可能只包含部分字段值,所有需要获得所有字段值,以插入完整记录假设已获取LCR用GET_VALUES('OLD') 获取未被更新的旧值为了将UPDATE类型的LCR完整的转变为INSERT类型,需要用SET_VALUES将旧值设为NEW然后将修改后的LCR用EXECUTE(TRUE)执行。

最后用和上一节相同的语句移除错误事务并开启同步即可为了使存储过程的调用变得简洁,将可上述两种存储过程合为一个2 处理流程首先定义一个存储过程[本文来自于Www.zZ-new.Com],定时查询DBA_APPLY_ERROR表,一旦发现错误事务,就调用冲突处理存储过程定时触发采用DBMS_JOB.SUBMIT程实现,每3分钟查询一次实际应用中主存储过程的调用频率可根据需要调整一般情况,冲突并非配置了双向Streams同步的数据库所应当出现的,因而可认为是低概率事件,配置几分钟一次的检查即可3 模拟测试在实验中,模拟连续100个删除冲突,按本文方法部署的冲突处理能够在20分钟内全部处理完毕,并使同步复原模拟连续1000个更新冲突,本文方法用大约4小时10分钟修复完毕从量级上来说,显然比人工处理节约人力与时间此外,一般若生产环境中的数据库使用得当,不会一次性有这么多冲突,本文方法对大量的同步冲突有一定的适应性4 结论本文针对Oracle双向streams同步中的冲突问题,指出常规方法的局限性:需要绑定表以及人工处理为了解决这两种不足,首先定义了一个具有广泛适用性的冲突事务处理存储过程,能够将错误事务的LCR修正并执行,以使同步继续。

然后定义了一个查询冲突事务的存储过程,配合Oracle定时任务,实现冲突事务的自动化处理经过冲突事务的模拟实验,该方法对平台没有依赖性对于频率较低的冲突事务,具有较好的处理时效;对于大量冲突事务,亦具备一定的承载能力在生产环境中,按本文部署冲突处理策略,能够在节省人力和时间同时加强streams双向同步的稳定性参考文献[1]蔡小祥,李晓华.Oracle STREAMS数据同步复制技术应用[J].医学信息学杂志,2015,36(02):38-40+60.[2]肖述.Oracle流复制技术在省级数据中心中的应用[J].无线互联科技,2016(04):136-137.[3]成雅.基于Oracle Streams的数据库实时备份与恢复技术研究[D].南京航空航天大学,2012.作者单位南京国电南自电网自动化有限公司研发中心 江苏省南京市 211100   -全文完-。

下载提示
相似文档
正为您匹配相似的精品文档