黄东旭解析 TiDB 的核心优势
916
2023-05-14
详解***数据库分布式事务ORA-01591错误解决方法
最近在update某张表时突然提示了个比较少见的错误,ORA-01591,这个问题跟平时的锁还有点不一样,下面一起来看看吧~
思路
这个错误是由于分布式事务引起,而不是普通的锁引起的,检查一般对象数据表锁定,只需要检查v$locked_object和v$transaction视图,就可以定位到具体的SQL语句和操作人等信息。
select * from gv$locked_object; select * from gv$transaction;
使用oerr工具查看该错误编号
处理方法
rollback force '20.13.14721';
Rollback force的参数是DBA_2PC_PENDING中记录本地事务信息的编号即LOCAL_TRAN_ID。
处理还是比较简单的,这里顺便分享下分布式事务的相关知识点。
分布式事务相关知识点
分布式事务,简单来说,是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过dblink update远程数据库的一行记录,如果在执行过程中网络异常,或者其他事件导致本地数据库无法得知远程数据库的执行情况,此时就会发生in doublt的报错。此时需要dba介入,且需要分多种情况进行处理。
***会自动处理分布事务,保证分布事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。
使用ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使***不再自动解决分布事务,即使网络恢复连接或者CRASH的数据库重新启动。
ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY恢复自动解决分布事务。
两个重要的视图
1. DBA_2PC_PENDING
DBA_2PC_PENDING:列出所有的悬而未决的事务﹐此视图在末填入悬而未决的事务之前是空的﹐解决这后也被清空。
DBA_2PC_PENDING的STATE列的说明
SELECT * FROM DBA_2PC_PENDING;
2. DBA_2PC_NEIGHBORS
DBA_2PC_NEIGHBORS:列出所有获得的(从远程客户)和送出的(给远程服务器)悬而未决的事务﹐也表示该本地节点是不是事务的提交点站点。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。