您的位置:首页 > 其它

ORA-01591: lock held by in-doubt…

2013-01-28 22:07 483 查看
总结:from 老白 http://www.oraclefans.cn/forum/showblog.jsp?rootid=7153

1、对于ORA-1591,一般来说是由于分布式事务失败引起的。强制提交或者回退分布式事务就可以解决问题

2、有些时候分布式事务自动的回退会失败,这样就会导致1591相关的表被锁住

3、这个时候分为两种情况,首先通过

    
SELECT KTUXEUSN, KTUXESLT, KTUXESQN,

          
KTUXESTA Status,

          
KTUXECFL Flags

    FROM
x$ktuxe

    WHERE
ktuxesta!='INACTIVE'

         
AND ktuxeusn in =108;

 确认事务的状态,如果显示是:

  KTUXEUSN  
KTUXESLT   KTUXESQN
STATUS          
FLAGS                                                                            

---------- ---------- ---------- ----------------
------------------------                                                         

      
108        
28     
46269
PREPARED        
SCO|COL|REV|DEAD 

说明事务需要回退或者提交。

此时如果DBA_2PC_PENDING中有该记录,但是状态不是PREPARED,那么就

 UPDATE PENDING_TRANS$
SET       
STATE='prepared',

       
STATUS ='P'

where local_tran_id='73.11.124822';

commit;

否则:

alter system disable distributed recovery;

insert into pending_trans$ (

       
LOCAL_TRAN_ID,

       
GLOBAL_TRAN_FMT,

       
GLOBAL_ORACLE_ID,

       
STATE,

       
STATUS,

       
SESSION_VECTOR,

       
RECO_VECTOR,

       
TYPE#,

       
FAIL_TIME,

       
RECO_TIME)

    values(
'108.28.46269',

       
306206,                 

       
'XXXXXXX.12345.1.2.3',  

       
'prepared','P',         

       
hextoraw( '00000001' ), 

       
hextoraw( '00000000' ), 

       
0, sysdate, sysdate );

    insert
into pending_sessions$

    values(
'108.28.46269',

       
1, hextoraw('05004F003A1500000104'),

       
'C', 0, 30258592, '',

       
146

     
);

   
commit;

插入相关记录。

然后进行ROLLBACK FORCE
 'TX-ID'或者COMMIT  FORCE
'TX-ID'

如果ROLLBACK 不成功,可以尝试COMMIT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: