加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

详解Oracle数据库分布式事务ORA-01591错误解决方法

发布时间:2019-10-31 10:52:41 所属栏目:编程 来源:波波说运维
导读:最近在update某张表时溘然提醒了个较量少见的错误,ORA-01591,这个题目跟平常的锁尚有点纷歧样,下面一路来看看吧~ 思绪 这个错误是因为漫衍式事宜引起,而不是平凡的锁引起的,搜查一样平常工具数据表锁定,只必要搜查v$locked_object和v$transaction视图,就

最近在update某张表时溘然提醒了个较量少见的错误,ORA-01591,这个题目跟平常的锁尚有点纷歧样,下面一路来看看吧~

详解Oracle数据库漫衍式事宜ORA-01591错误办理要领

思绪

这个错误是因为漫衍式事宜引起,而不是平凡的锁引起的,搜查一样平常工具数据表锁定,只必要搜查v$locked_object和v$transaction视图,就可以定位到详细的SQL语句和操纵人等信息。

  1. select * from gv$locked_object; 
  2. select * from gv$transaction; 

行使oerr器材查察该错误编号

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

简朴的说,01591错误的缘故起因是该工具被一个处在“in-doubt”状态的漫衍式事宜锁定。漫衍式事宜行使的是“two-phase commit”二阶段提交技能。办理该题目的要领就是查察内部表pending_trans$,确定漫衍式事宜信息。这种状态的事宜首要是因为在举办漫衍式事宜时辰,产生收集突发间断的环境,引起漫衍式事宜无法正常竣事,守候间断节点的事宜相应。于是,各节点的事宜所锁定的表就不会被开释掉。

处理赏罚要领

  1. rollback force '20.13.14721'; 

Rollback force的参数是DBA_2PC_PENDING中记录当地事宜信息的编号即LOCAL_TRAN_ID。

处理赏罚照旧较量简朴的,这里趁便分享下漫衍式事宜的相干常识点。

漫衍式事宜相干常识点

漫衍式事宜,简朴来说,是指一个事宜在当地和长途执行,当地必要守候确认长途的事宜竣事后,举办下一步当地的操纵。如通过dblink update长途数据库的一行记录,假如在执行进程中收集非常,可能其他变乱导致当地数据库无法得知长途数据库的执行环境,此时就会产生in doublt的报错。此时必要dba参与,且必要分多种环境举办处理赏罚。

Oracle会自动处理赏罚漫衍事宜,担保漫衍事宜的同等性,全部站点所有提交或所有回滚。一样平常环境下,处理赏罚进程在很短的时刻内完成,基础无法察觉到。

可是,假如在commit或rollback的时辰,呈现了毗连间断或某个数据库 站点CRASH的环境,则提交操纵也许会无法继承,此时DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中会包括尚未办理的漫衍事宜。 对付绝大大都环境,当规复毗连或CRASH的数据库从头启动后,会自动办理漫衍式事宜,不必要人工过问。只有漫衍事宜锁住的工具急需被会见,锁住的回滚段阻止了其他事宜的行使,收集妨碍或CRASH的数据库的规复必要很长的时刻等环境呈现时,才行使人工操纵的方法来维护漫衍式事宜。 手工逼迫提交或回滚将失去二层提交的特征,Oracle无法继承担保事宜的同等性,事宜的同等性应由手工操纵者担保

行使ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使Oracle不再自动办理漫衍事宜,纵然收集规复毗连可能CRASH的数据库从头启动。

ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY规复自动办理漫衍事宜。

两个重要的视图

1. DBA_2PC_PENDING

DBA_2PC_PENDING:列出全部的悬而未决的事宜﹐此视图在末填入悬而未决的事宜之前是空的﹐办理这后也被清空。

详解Oracle数据库漫衍式事宜ORA-01591错误办理要领

DBA_2PC_PENDING的STATE列的声名

详解Oracle数据库漫衍式事宜ORA-01591错误办理要领

SELECT * FROM DBA_2PC_PENDING;

详解Oracle数据库漫衍式事宜ORA-01591错误办理要领

2. DBA_2PC_NEIGHBORS

DBA_2PC_NEIGHBORS:列出全部得到的(从长途客户)和送出的(给长途处事器)悬而未决的事宜﹐也暗示应当地节点是不是事宜的提交点站点。

详解Oracle数据库漫衍式事宜ORA-01591错误办理要领

【编辑保举】

  1. 微处事的数据库计划
  2. 超具体的SQL Server数据库触发器总结
  3. 公司怎样选择数据库?DynamoDB、Hadoop和MongoDB 大比拼
  4. 华为云数据库助力锦江国都开释数据代价,驱动营业厘革
  5. MySQL尝试之差异字符集数据库迁徙步调演示
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读