Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5386107
  • 博文数量: 890
  • 博客积分: 12876
  • 博客等级: 上将
  • 技术积分: 10760
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-04 14:18
个人简介

猝然临之而不惊,无故加之而不怒。

文章分类

全部博文(890)

文章存档

2016年(1)

2014年(18)

2013年(41)

2012年(48)

2011年(65)

2010年(84)

2009年(121)

2008年(101)

2007年(129)

2006年(95)

2005年(118)

2004年(69)

分类: Oracle

2013-01-02 17:36:08

错误代码:ORA-01591

错误原因:使用了分布式事务,造成这个问题的原因很多时候都是由于网络问题造成的

解决办法:
1.找到TRAN_ID
Select 'Rollback force '''||LOCAL_TRAN_ID||'''' from sys.pending_trans$;

2.將其COMMIT或ROLLBACK:   
rollback force LOCAL_TRAN_ID;   
commit force LOCAL_TRAN_ID; 
 
3.如果执行失败,则强行从资料字典中删除该交易记录: 
set transaction use rollback segment system;    
delete from dba_2pc_pending where local_tran_id = LOCAL_TRAN_ID;    
delete from pending_sessions$ where local_tran_id = LOCAL_TRAN_ID;    
delete from pending_sub_sessions$ where local_tran_id = LOCAL_TRAN_ID;    
commit;

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

5.生成语句操作语句的程序
begin  
  for r in (select local_tran_id   
              from dba_2pc_pending t   
             where t.state = 'collecting') loop   
    --dbms_output.put_line('commit force '''||r.local_tran_id||''';');   
    dbms_output.put_line('delete from dba_2pc_pending where local_tran_id = '''||r.local_tran_id||''';');   
    dbms_output.put_line('delete from pending_sessions$ where local_tran_id = '''||r.local_tran_id||''';');   
    dbms_output.put_line('delete from pending_sub_sessions$ where local_tran_id = '''||r.local_tran_id||''';');   
  end loop;   
  dbms_output.put_line('commit;');   
end;

From:http://blog.csscss.org/post/16.shtml

阅读(690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~