资讯专栏INFORMATION COLUMN

​分布式事务锁介绍及一般处理方法

IT那活儿 / 1178人阅读
​分布式事务锁介绍及一般处理方法

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


目的

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


知识点描述

分布式事务,简单来说,是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过dblink update远程数据库的一行记录,如果在执行过程中网络异常,或者其他事件导致本地数据库无法得知远程数据库的执行情况,此时就会发生in doublt的报错。
当前的分布式事务处于Two-Phase Commit机制中的prepared阶段,这个阶段事务已经在表上加锁了,现在我们要访问这些表,但事务没有结束,一直持有锁,导致访问资源失败报ORA-01591。分布式事务所持有的锁之所以堵塞读操作,是因为oralce不知道该显示哪个版本的数据。当一个分布式事务死掉时,由于该事务没有正常结束,导致事务持有的锁一直没有释放,所以在访问这个事务涉及的资源时,申请不到锁资源,所以报ORA-01591。

ORA-01591错误一般是由于分布式事务造成的,造成分布式事务失败的原因可能是库之间的网络突然中断或者更新操作窗口会话被断开,造成两个库中的事务信息不一致,导致有残余的分布式事务信息未被释放。


标准指导操作

3.1 分布式事务两阶段提交
两阶段提交协议可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。
它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。
两阶段提交分为Prepare Phase (准备阶段)和Commit Phase (提交阶段)
1)准备阶段
协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,则会写redo或者undo日志(Write-Ahead Log的一种),然后锁定资源,执行操作,但是并不提交。
2)提交阶段
如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,则协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,则协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源。
3.2 存在的问题
两阶段提交协议在准备阶段锁定资源,这是一个非常损耗资源的操作,能保证强一致性,但是实现起来复杂、成本较高、不够灵活,更重要的是它有一些致命的问题。
1)阻塞
从上面的描述来看,对于任何一次指令都必须收到明确的响应,才会继续进行下一步,否则处于阻塞状态,占用的资源被一直锁定,不会被释放。
2)单点故障
如果协调者宕机,参与者没有协调者指挥,则会一直阻塞,尽管可以通过选举新的协调者替代原有协调者,但是如果协调者在发送一个提交指令后宕机,而提交指令仅仅被一个参与者接收,并且参与者接收后也宕机,则新上任的协调者无法处理这种情况。
3)脑裂
协调者发送提交指令,有的参与者接收到并执行了事务,有的参与者没有接收到事务就没有执行事务,多个参与者之间是不一致的。
4)数据状态不确定
协调者再发出commit消息之后丢失,而唯一接收到这条消息的参与者同时也丢失了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。
3.3 一般解决方法
对于分布式事务锁一般性解决方法为对事务进行回滚使两者数据库回到正常状态;Rollback force的参数是DBA_2PC_PENDING中记录本地事务信息的编号即LOCAL_TRAN_ID。语法命令:Rollback force ‘20.13.1546896’


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

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

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

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

相关文章

  • 为Java程序员金三银四精心挑选的300余道Java面试题与答案

    摘要:为程序员金三银四精心挑选的余道面试题与答案,欢迎大家向我推荐你在面试过程中遇到的问题我会把大家推荐的问题添加到下面的常用面试题清单中供大家参考。 为Java程序员金三银四精心挑选的300余道Java面试题与答案,欢迎大家向我推荐你在面试过程中遇到的问题,我会把大家推荐的问题添加到下面的常用面试题清单中供大家参考。 前两天写的以下博客,大家比较认可,热度不错,希望可以帮到准备或者正在参加...

    tomorrowwu 评论0 收藏0
  • TiDB 在转转的业务实战

    摘要:而批处理,可以复用一条简单,实现批量数据的写入或更新,为系统带来更低更稳定的耗时。批处理的简要流程说明如下经业务中实践,使用批处理方式的写入或更新,比常规或性能更稳定,耗时也更低。 作者:陈维,转转优品技术部 RD。 开篇 世界级的开源分布式数据库 TiDB 自 2016 年 12 月正式发布第一个版本以来,业内诸多公司逐步引入使用,并取得广泛认可。 对于互联网公司,数据存储的重要性不...

    hover_lew 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    BicycleWarrior 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

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