Oracle 分布式事务 2pc 故障处理

简介: 我们在使用 oracle 数据库时,有时候会碰到需要使用分布式事务,并且会碰到一些报错!

目录



📚 前言


我们在使用 oracle 数据库时,有时候会碰到需要使用分布式事务,并且会碰到一些报错!


☀️ 分布式事务


当需要在多个Oracle数据库之间进行数据一致性操作时,就会用到分布式事务。


例如:


insertintoT_log@remote_db;  --远程数据库插入insertintoT_local;          --本地数据库插入commit;


分布在本地和远程两个db的事务同时操作,这就构成了一个分布式事务。


分布式事务采用 Two-Phase Commit 提交机制,保证分布在各个节点的子事务能够全部提交或全部回滚的原子性。


在这种机制下,事务处理过程分为三个阶段:


  • PREPARE:发起分布式事务的节点通知各个关联节点准备提交或回滚。


  • COMMIT:写入commited SCN,释放锁资源


  • FORGET:悬疑事务表和关联的数据库视图信息清理


各关联节点此时会做三个事情:刷新redo信息到redo log中;将持有的锁转换为悬疑事务锁;取各节点中最大的SCN号进行同步!


⭐️ 常见错误


以下是三种常见的分布式事务问题场景:


  • dba_2pc视图中有数据,但分布式事务已经不存在


  • 分布式事务存在,但dba_2pc视图中没有数据


  • 事务和视图数据都有,但是执行commit force或rollback force时hang住


通过报错会有提示,例如:


ORA-01591: lockheldbyin-doubtdistributedtransaction10.20.360


这个10.20.360就是我们需要检查分布式事务ID!


由于分布式事务涉及到多个数据库之间进行操作,偶尔会遇到一些异常情况(例如系统或网络中断)导致上述三个阶段出现异常,这就在一个或多个节点上,产生不完整的“悬疑分布式事务”。


大多数情况下,出现这种问题,Oracle 会由 Reco 进程进行自动修复,Oracle 数据库会在 dba_2pc_pendingdba_2pc_neighbors 等多个视图中记录分布式事务相关的信息,事实上 reco 进程也是基于这些信息去做自动修复的。


Reco 进程会尝试连接到其他节点获取分布式事务信息,然后尝试修复失败的事务,并将对应的事务中的记录删除。


但有些情况下(例如节点无法正常访问或事务表中记录的数据不完整),Reco 进程不能正常完成这个工作,就会抛出异常。


对于分布式事务,对应的异常代码区间是ORA-02040 - ORA-02099,可通过alert日志查看到错误信息。


例如:


ORA-02054: transactionin-doubtThetransactionisneithercommittedorrolledbacklocally, andwehavelostcommunicationwiththeglobalcoordinator.


此时往往需要手工处理进行干预。


常用的 2pc_clean 命令如下:


select'rollback force '||''''||local_tran_id||''''||';' "RollBack"from dba_2pc_pendingwhere state='prepared';select 'execdbms_transaction.purge_lost_db_entry('||''''||local_tran_id||''''||');' "Purge"from dba_2pc_pending;select 'rollbackforce''' || LOCAL_TRAN_ID || ''';' || chr(10) ||'executeDBMS_TRANSACTION.PURGE_LOST_DB_ENTRY(''' || LOCAL_TRAN_ID|| ''');' || chr(10) || 'commit;' from DBA_2PC_PENDING;


相关文章
|
3月前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
168 11
|
5月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
8月前
|
Oracle 关系型数据库 数据库
关系型数据库Oracle 故障转移能力
【7月更文挑战第10天】
88 2
|
算法
分布式系统中的那些一致性(CAP、BASE、2PC、3PC、Paxos、ZAB、Raft)
本文介绍 CAP、BASE理论的正确理解、Paxos 算法如何保证一致性及死循环问题、ZAB 协议中原子广播及崩溃恢复以及 Raft 算法的动态演示。
376 0
|
10月前
|
分布式计算 算法
分布式系统设计之共识算法—2PC、3PC、 Paxos
分布式系统设计之共识算法—2PC、3PC、 Paxos
167 1
|
10月前
|
存储 消息中间件 关系型数据库
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
190 0
|
10月前
|
运维 Oracle 关系型数据库
服务器数据恢复-raid5故障导致上层oracle数据库故障的数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统+ext3文件系统,服务器上层部署有oracle数据库。 服务器故障&检测: raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法挂载,oracle数据库无法正常使用。 通过管理后台查看服务器中硬盘的状态,显示有两块硬盘处于离线状态。
|
算法 Oracle 关系型数据库
【分布式】分布式事务基础概念(2PC,3PC,TCC)
【分布式】分布式事务基础概念(2PC,3PC,TCC)
1129 1
|
存储 Oracle 算法
数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
ORACLE数据库常见故障: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。
|
消息中间件 算法 程序员
分布式事务 2PC
分布式事务是指跨越多个计算机节点的事务,涉及到多个数据库或其他资源的访问和更新。在分布式事务中,由于数据分布在不同的节点上,因此需要采用一些特殊的技术来保证事务的一致性和可靠性,其中最常用的技术之一就是两阶段提交(Two-Phase Commit,2PC)。
148 0
分布式事务 2PC

推荐镜像

更多