Oracle数据库错误ORA-01591的解决方法详解_Oracle_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > Oracle > Oracle数据库错误ORA-01591的解决方法详解

Oracle数据库错误ORA-01591的解决方法详解

 2013/8/10 1:22:00    程序员俱乐部  我要评论(0)
  • 摘要:在Oracle数据库操作中遇到了ORA-01591的错误,经过分析得知错误的原因是使用了分布式事务,造成这个问题的原因很多时候都是由于网络问题造成的。解决办法如下:1.找到TRAN_IDSelect'Rollbackforce'''||LOCAL_TRAN_ID||''''fromsys.pending_trans$;2.將其COMMIT或ROLLBACK:rollbackforceLOCAL_TRAN_ID;commitforceLOCAL_TRAN_ID;3.如果执行失败
  • 标签:详解 方法 解决方法 解决 ORA 数据库 数据 Oracle Oracle数据库 错误

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

解决办法如下:

1.找到TRAN_ID

    class="dp-xml">
  1. Select 'Rollback force '''||LOCAL_TRAN_ID||'''' from sys.pending_trans$; 

2.將其COMMIT或ROLLBACK:

  1. rollback force LOCAL_TRAN_ID;   
  2. commit force LOCAL_TRAN_ID; 

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

  1. set transaction use rollback segment system;   
  2. delete from dba_2pc_pending where local_tran_id = LOCAL_TRAN_ID;   
  3. delete from pending_sessions$ where local_tran_id = LOCAL_TRAN_ID;  
  4. delete from pending_sub_sessions$ where local_tran_id = LOCAL_TRAN_ID;   
  5. commit; 

生成批量语句:

  1. begin   
  2. for r in (select local_tran_id   
  3. from dba_2pc_pending t   
  4. where t.state = 'collecting') loop   
  5. --dbms_output.put_line('commit force '''||r.local_tran_id||''';');   
  6. dbms_output.put_line('delete from dba_2pc_pending where local_tran_id = '''||r.local_tran_id||''';');   
  7. dbms_output.put_line('delete from pending_sessions$ where local_tran_id = '''||r.local_tran_id||''';');   
  8. dbms_output.put_line('delete from pending_sub_sessions$ where local_tran_id = '''||r.local_tran_id||''';');   
  9. end loop;   
  10. dbms_output.put_line('commit;');   
  11. end; 

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

以上就是Oracle数据库错误ORA-01591的几种详细的解决方法,希望本次的介绍能够对您有所收获!

发表评论
用户名: 匿名