1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

Oracle数据库操作中遇到了ORA-01591的错误,经过分析得知错误的原因是使用了分布式事务,造成这个问题的原因很多时候都是由于网络问题造成的。

解决办法如下:

1.找到TRAN_ID

Select'Rollbackforce'''||LOCAL_TRAN_ID||''''fromsys.pending_trans$;

2.將其COMMIT或ROLLBACK:

rollbackforceLOCAL_TRAN_ID; 
commitforceLOCAL_TRAN_ID;

3.如果执行失败,则强行从资料字典中删除该交易记录

settransactionuserollbacksegmentsystem; 
deletefromdba_2pc_pendingwherelocal_tran_id=LOCAL_TRAN_ID; 
deletefrompending_sessions$wherelocal_tran_id=LOCAL_TRAN_ID; 
deletefrompending_sub_sessions$wherelocal_tran_id=LOCAL_TRAN_ID; 
commit;

生成批量语句:

begin 
forrin(selectlocal_tran_id 
fromdba_2pc_pendingt 
wheret.state='collecting')loop 
--dbms_output.put_line('commitforce'''||r.local_tran_id||''';'); 
dbms_output.put_line('deletefromdba_2pc_pendingwherelocal_tran_id='''||r.local_tran_id||''';'); 
dbms_output.put_line('deletefrompending_sessions$wherelocal_tran_id='''||r.local_tran_id||''';'); 
dbms_output.put_line('deletefrompending_sub_sessions$wherelocal_tran_id='''||r.local_tran_id||''';'); 
endloop; 
dbms_output.put_line('commit;'); 
end;

4.执行失败,还一种情况可以尝试下重起一下Oracle服务,这种情况我遇到过一次,重新启动后该锁自动解除(因为对删除数据字典比较担心,所以胡乱试了一次重启数据库,前提是执行了commit force LOCAL_TRAN_ID;失败之后重新启动)。

本文来源:1818IP

本文地址:https://www.1818ip.com/post/10647.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。