iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >ORA-01591: 锁被未决分布式事务处理解决方案
  • 752
分享到

ORA-01591: 锁被未决分布式事务处理解决方案

2024-04-02 19:04:59 752人浏览 独家记忆
摘要

 http://www.killdb.com/2011/10/11/ora-01591-lock-held-by-in-doubt-distributed-transaction.html 现场

 http://www.killdb.com/2011/10/11/ora-01591-lock-held-by-in-doubt-distributed-transaction.html

现场报有一个功能走不下去,后台日志报错:java.sql.SQLException: ORA-01591: 锁被未决分布式事务处理 657.7.39336 持有。

   解决方案:

   rollback force '657.7.39336';--执行可能会比较慢

   执行完成后,查询DBA_2PC_PENDING,

   select * from DBA_2PC_PENDING s  where s.local_tran_id='657.7.39336';

   657.7.39336 SP4GD.a6dfea73.657.7.39336forced rollback no 2015-6-17 5:28:05 2015-6-17 10:44:33 2015-6-17 5:28:05 oracle UNKNOWN SCDB02 LCA_ZC       14456764049772
  
或者

   delete from sys.pending_trans$ where local_tran_id = '657.7.39336';
   delete from sys.pending_sessions$ where local_tran_id = '657.7.39336';
   delete from sys.pending_sub_sessions$ where local_tran_id ='657.7.39336';
   commit;
   Commit force '657.7.39336'
   exec dbms_transaction.purge_lost_db_entry('657.7.39336');

DBA_2PC_PENDING describes distributed transactions awaiting recovery.描述等待恢复的分布式事务



这个错误是什么意思呢?

[oracle@standby ~]$  oerr ora 01591
01591, 00000, "lock held by in-doubt distributed transaction %s"
// *Cause:  Trying to access resource that is locked by a dead two-phase commit
//          transaction that is in prepared state.
// *Action: DBA should query the pending_trans$ and related tables, and attempt
//          to repair network connection(s) to coordinator and commit point.
//          If timely repair is not possible, DBA should contact DBA at commit
//          point if known or end user for correct outcome, or use heuristic
//          default if given to issue a heuristic commit or abort command to
//          finalize the local portion of the distributed transaction.

两阶段提交(2PC)
两阶段提交协议可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。
顾名思义,两阶段提交分为以下两个阶段:
1)Prepare Phase (准备节点)
2)Commit Phase (提交阶段)

1)Prepare Phase
在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。

为了完成准准备阶段,除了commit point site外,其它的数据库节点按照以下步骤执行:
每个节点检查自己是否被其它节点所引用,如果有,就通知这些节点准备提交(进入 Prepare阶段)。
每个节点检查自己运行的事务,如果发现本地运行的事务没有修改数据的操作(只读),则跳过后面的步骤,直接返回一个read only给全局协调器。
如果事务需要修改数据,则为事务分配相应的资源用于保证修改的正常进行。
当上面的工作都成功后,给全局协调器返回准备就绪的信息,反之,则返回失败的信息。

2) Commit Phase

在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行响应的操作。
 
提交阶段按下面的步骤进行:
全局协调器通知 commit point site 进行提交。
commit point site 提交,完成后通知全局协调器。
全局协调器通知其它节点进行提交。
其它节点各自提交本地事务,完成后释放锁和资源。
其它节点通知全局协调器提交完成。

3)结束阶段
全局协调器通知commit point site说所有节点提交完成。
commit point site数据库释放和事务相关的所有资源,然后通知全局协调器。
全局协调器释放自己持有的资源。

分布式事务结束

一般情况下,两阶段提交机制都能较好的运行,当在事务进行过程中,有参与者宕机时,重启以后,可以通过询问其他参与者或者协调者,从而知道这个事务到底提交了没有。当然,这一切的前提都是各个参与者在进行每一步操作时,都会事先写入日志。

唯一一个两阶段提交不能解决的困境是:当协调者在发出commit 消息后宕机,而唯一收到这条命令的一个参与者也宕机了,这个时候这个事务就处于一个未知的状态,没有人知道这个事务到底是提交了还是未提交,从而需要数据库管理员的介入,防止数据库进入一个不一致的状态。当然,如果有一个前提是:所有节点或者网络的异常最终都会恢复,那么这个问题就不存在了,协调者和参与者最终会重启,其他节点也最终会收到commit 的信息。这也符合CAP理论。
http://blog.itpub.net/48010/viewspace-1016050/

下面简单介绍一下分布式事务。

分布式事务,简单来说,是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过dblink update远程数据库的一行记录,如果在执行过程中网络异常,或者其他事件导致本地数据库无法得知远程数据库的执行情况,此时就会发生in doublt的报错。此时需要dba介入,且需要分多种情况进行处理。

分布式事务的Two-Phase Commit机制,会经历3个阶段:

1.PREPARE PHASE:

1.1 决定哪个数据库为commit point site。(注,参数文件中commit_point_strength值高的那个数据库为commit point site)

1.2 全局协调者(Global Coordinator)要求所有的点(除commit point site外)做好commit或者rollback的准备。此时,对分布式事务的表加锁。

1.3 所有分布式事务的节点将它的scn告知全局协调者。

1.4 全局协调者取各个点的最大的scn作为分布式事务的scn。

至此,所有的点都完成了准备工作,我们开始进入COMMIT PHASE阶段,此时除commit point site点外所有点的事务均为in doubt状态,直到COMMIT PHASE阶段结束。

2.COMMIT PHASE:
2.1 Global Coordinator将最大scn传到commit point site,要求其commit。
2.2 commit point尝试commit或者rollback。分布式事务锁释放。
2.3 commit point通知Global Coordinator已经commit。
2.4 Global Coordinator通知分布式事务的所有点进行commit。

3.FORGET PHASE:
3.1 参与的点通知commit point site他们已经完成commit,commit point site就能忘记(forget)这个事务。
3.2 commit point site在远程数据库上清除分布式事务信息。
3.3 commit point site通知Global Coordinator可以清除本地的分布式事务信息。
3.4 Global Coordinator清除分布式事务信息

以上3个阶段,在任何一个阶段的前、中、后发生失败都会导致two phase commit失败,一般来说,Oracle后台进程REC0会自动恢复事务,只有在分布式事务锁住的对象急需被访问,锁住的回滚段阻止了其他事务的使用,网络故障或CRASH的数据库的恢复需要很长的时间等情况出现时,才需要使用人工操作的方式来维护分布式事务,而分布式事务失败的情况也比较复杂,需要针对不同的情形采取相应的措施,Oracle中提供了视图dba_2pc_pending和dba_2pc_neighbors供用户查看分布式事务的相关信息,通常two phase commit失败有如下5种情况:

1.prepare阶段没准备好就失败了,global coordinator正在等待各个站点返回已准备好的通知,处于collecting状态,dba_2pc_pending试图中的state列的值是collecting,各个站点什么都没发生,无需执行任何操作,在本地数据库执行exec dbms_transaction.purge_lost_db_entry(’transaction_id’)清除in_doubt状态的分布式事务记录就可以了

2.prepare阶段完成时发生失败,global coordinator处于prepared状态,已经加上分布锁,等待提交,远程commit point site已经自动回滚,此时需要在global coordinator上执行rollback force ‘transaction_id’,然后清除in_doubt状态的分布式事务记录

3.commit point site执行commit完成后其他站点尚未commit时发生失败,这时需要在其他站点执行commit force ‘transaction_id’,'commit#’,注意后面的commit#使用较高的commit#,可以查询各个站点的dba_2pc_pending试图的commit#列得到,然后清除in_doubt状态的分布式事务记录

4.所有站点commit成功,进入forget阶段时发生失败,数据已经一致,只需在各站点清除in_doubt状态的分布式事务记录就可以了

5.commit point site完成forget阶段,其他站点没完成forget,只需在其他站点清除in_doubt状态的分布式事务记录就可以了
您可能感兴趣的文档:

--结束END--

本文标题: ORA-01591: 锁被未决分布式事务处理解决方案

本文链接: https://www.lsjlt.com/news/46775.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle数据库分布式事务ORA-01591错误的解决方法
    这篇文章将为大家详细讲解有关Oracle数据库分布式事务ORA-01591错误的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定...
    99+
    2024-04-02
  • LCN分布式事务解决方案详解
    目录一、什么是分布式事务?二、lcn的实现思路2.1 本地执行的状态怎么提交给全局事务?2.2 本地事务的提交或回滚怎么实现?三、lcn的使用3.1 下载lcn-manager (全...
    99+
    2024-04-02
  • java分布式事务解决方案是什么
    Java分布式事务解决方案包括但不限于以下几种: 使用XA协议来管理分布式事务。XA协议是一种由X/Open组织定义的分布式事务...
    99+
    2024-04-02
  • 详解Java分布式事务的 6 种解决方案
    介绍 在分布式系统、微服务架构大行其道的今天,服务间互相调用出现失败已经成为常态。如何处理异常,如何保证数据一致性,成为微服务设计过程中,绕不开的一个难题。 在不同的业务场景下,解决...
    99+
    2024-04-02
  • MySQL分布式解决方案
      Mycat是一个开源的分布式数据库系统,其核心功能是分表分库,即将一个大表水平分割为多个小表, 存储在后端MySQL或者其他数据库里。取名Mycat原因一是简单好记,另一个则是希望未来能够入驻 Apache, Apache的开源产品T...
    99+
    2023-10-08
    mysql 分布式 数据库
  • 分布式事务的7种解决方案是怎样的
    分布式事务的7种解决方案是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 分布式事务最经典的七种解决方案随着...
    99+
    2024-04-02
  • 图文精讲java常见分布式事务理论与解决方案
    目录CAP理论C(Consistence):一致性A(Availability):可用性P(Partition tolerance):分区容错性BASE理论BA(Basically ...
    99+
    2024-04-02
  • JPA多数据源分布式事务处理方案
    目录前言问题背景XA事务方案XADataSource,XA协议数据源XAConnectionXAResource引入Atomikos依赖创建JTA事务管理器MysqlXA事务行为链式...
    99+
    2024-04-02
  • 九种分布式ID解决方案
    文章目录 背景1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置 3、号段模式4、Redis INCR5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)...
    99+
    2023-09-12
    分布式 数据库 java
  • 一文搞明白Java Spring Boot分布式事务解决方案
    目录前言1. 什么是反向补偿2. 基本概念梳理3. 什么是两阶段提交4. AT 模式5. TCC 模式6. XA 模式7. Saga 模式前言 分布式事务,咱们前边也聊过很多次了,网...
    99+
    2024-04-02
  • Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)
    目录一、简介二、seata-server部署1、官网下载2、解压到本地3、修改配置文件4、seata数据库初始化5、业务数据库6、启动seata-server三、微服务项目集成Sea...
    99+
    2024-04-02
  • java SpringBoot 分布式事务的解决方案(JTA+Atomic+多数据源)
    目录前言一、项目依赖二、数据源配置三、数据源的注册四、配置数据源对应的sqlSessionFactory五、测试接口六、建立JtaTestContoller.java七、在test....
    99+
    2024-04-02
  • 微服务分布式事务4种解决方案是怎么样的
    本篇文章给大家分享的是有关微服务分布式事务4种解决方案是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。分布式事务分布式事务是指事务的参与者,支持事务的服务器,资源服务器...
    99+
    2023-06-02
  • 怎么分析分布式事务常用解决方法
    这期内容当中小编将会给大家带来有关怎么分析分布式事务常用解决方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。分布式事务的解决方法方案1:全局事务(DTP模型)全局事务基于DTP模型实现。DTP是由X/O...
    99+
    2023-06-04
  • 怎么解析Spring Cloud 微服务系统中分布式事务解决方案
    本篇文章为大家展示了怎么解析Spring Cloud 微服务系统中分布式事务解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、微服务系统最大的挑战数据的并发访问、修改不同请求之间的数据隔离多...
    99+
    2023-06-04
  • 关于MySQL与Golan分布式事务经典的七种解决方案
    目录1、基础理论1.1 事务1.2 分布式事务2、分布式事务的解决方案2.1 两阶段提交/XA2.2 SAGA2.3 TCC2.4 本地消息表2.5 事务消息2.6 最大努力通知2....
    99+
    2024-04-02
  • java常见分布式事务理论怎么解决
    本篇内容介绍了“java常见分布式事务理论怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CAP理论先从定义开始:C(Consiste...
    99+
    2023-06-21
  • 分布式文件管理:Python和Apache的解决方案?
    在当今互联网时代,我们每天都会产生大量的文件。为了更好地管理和存储这些文件,分布式文件管理系统应运而生。Python和Apache都有自己的分布式文件管理解决方案。那么,这两个解决方案有什么不同呢?本文将介绍它们的特点和使用方法。 一、P...
    99+
    2023-07-31
    apache 文件 分布式
  • redis实现分布式session的解决方案
    目录一、首先Session二、分布式Session补充:一、首先Session Session 是客户端与服务器通讯会话技术, 比如浏览器登陆、记录整个浏览会话信息。session存...
    99+
    2024-04-02
  • MongoDB技术开发中遇到的分布式事务管理问题解决方案分析
    MongoDB技术开发中遇到的分布式事务管理问题解决方案分析摘要:随着分布式系统的普及,分布式事务管理成为了一个亟待解决的问题。本文针对MongoDB技术开发中遇到的分布式事务管理问题进行了深入分析,并提出了解决方案。主要包括两阶段提交协议...
    99+
    2023-10-22
    解决方案 MongoDB 分布式事务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作