资讯专栏INFORMATION COLUMN

分布式事务锁特殊情况强制处理方法

IT那活儿 / 1774人阅读
分布式事务锁特殊情况强制处理方法

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


目的

通过建立知识库管理,积累、保存信息和知识资产,为团队内部信息和知识的传播提供平台,实现团队内知识共享,也使得企业知识得到很好的精炼和沉淀。


知识点描述

分布式事务及分布式事务锁介绍:
分布式事务,简单来说,是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过dblink update远程数据库的一行记录,如果在执行过程中网络异常,或者其他事件导致本地数据库无法得知远程数据库的执行情况,此时就会发生in doublt的报错。
当前的分布式事务处于Two-Phase Commit机制中的prepared阶段,这个阶段事务已经在表上加锁了,现在我们要访问这些表,但事务没有结束,一直持有锁,导致访问资源失败报ORA-01591
分布式事务所持有的锁之所以堵塞读操作,是因为oralce不知道该显示哪个版本的数据。当一个分布式事务死掉时,由于该事务没有正常结束,导致事务持有的锁一直没有释放,所以在访问这个事务涉及的资源时,申请不到锁资源,所以报ORA-01591。
ORA-01591错误一般是由于分布式事务造成的,造成分布式事务失败的原因可能是库之间的网络突然中断或者更新操作窗口会话被断开,造成两个库中的事务信息不一致,导致有残余的分布式事务信息未被释放
任何事务都有特殊情况,分布式事务锁的一般性解决方案是直接进行回滚,或等待网络自动连接后数据库自动调配解决;

特殊情况下当强制回滚无法相应时,还有两个备用操作可以解决——重启数据库与修改数据库基表数据。但后者修改基表的风险是比较大的,慎用!!!


标准指导操作

3.1 重启数据库自动解决
风险:对于业务数据库来说,重启之后如果其上的业务无法自动转移到另一个集群节点上,那么会对业务运行造成影响,更进一步的,会对其他与之关联的数据库业务也造成影响。
因此这种风险的重点在于风险扩散。
3.2 修改数据库基表
1)分布式事务原理
两阶段提交协议可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。两阶段提交分为Prepare Phase (准备阶段)和Commit Phase (提交阶段)。
2)修改基表原理
对数据库基表pending_trans$和pending_sessions$录入分布式事务的相关数据,提交数据后对该事务也进行提交,伪造该分布式事务已经完成的记录,从而使得该锁能够成功释放。
3)风险:官方一般不建议修改数据库基表信息,基表属于oracle后端表,修改基表相当于数据欺骗,人为干预本该数据库可以自动完成的过程,可能导致数据不一致,数据混乱,或者基表数据异常进而影响其他事务执行。慎用!!
4)修改方法
*对基表pending_trans$和pending_sessions$手动录入事务3128.22.4729750的数据。
*数据录入完成后对表数据提交,同时对该事务进行强制commit,伪造成该事务已完成的记录。提交完成后该分布式事务锁便可解开。
*由于该事务的执行记录是伪造的,因此还需清除本地数据库所记载的远程事务入口,该事务入口操作因为远程数据库问题未能在远程数据库完成。即在事务锁解开后清除该条伪造的事务数据记录。完成后便可正常对表进行操作。


本文作者:陈炎亮(上海新炬王翦团队)

本文来源:“IT那活儿”公众号


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129154.html

相关文章

  • Redis 布式--PHP

    摘要:分布式锁的作用在单机环境下,有个秒杀商品的活动,在短时间内,服务器压力和流量会陡然上升。分布式集群业务业务场景下,每台服务器是独立存在的。这里就用到了分布式锁这里简单介绍一下,以的事务机制来延生。 Redis 分布式锁的作用 在单机环境下,有个秒杀商品的活动,在短时间内,服务器压力和流量会陡然上升。这个就会存在并发的问题。想要解决并发需要解决以下问题 1、提高系统吞吐率也就是qps 每...

    canger 评论0 收藏0
  • 关系型数据库中的事务管理详解:并发控制与事务日志

    摘要:关系型数据库中的事务管理详解并发控制与事务日志数据库系统的萌芽出现于年代。并发控制并发控制旨在针对数据库中对事务并行的场景,保证中的一致性与隔离性。绝大部分数据库会采用锁或者数据版本控制的方式来处理并发控制问题。 本文节选自:关系型数据库理论 https://url.wx-coder.cn/DJNQn ,涉及引用/整理的文章列举在了 Database-List。 showImg(htt...

    Pink 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<