ORA-01591問題處理

錯誤內容: ORA-01591: 此一鎖定目前是由有問題的分散式交易 7.8.85772 所持有

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

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

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

SELECT KTUXEUSN,
KTUXESLT,
KTUXESQN, /* Transaction ID */
KTUXESTA Status,
KTUXECFL Flags
FROM x$ktuxe
WHERE ktuxesta != 'INACTIVE'
AND ktuxeusn = 7;

确认事务的状态,如果显示是:
KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS
---------- ---------- ---------- ---------------- ------------------------
7 8 85772 PREPARED SCO|COL|REV|DEAD
说明事务需要回退或者提交。

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

UPDATE PENDING_TRANS$ SET STATE='prepared',
STATUS ='P'
where local_tran_id='7.8.85772';
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( '7.8.85772',
306206,
'XXXXXXX.12345.1.2.3',
'prepared','P',
hextoraw( '00000001' ),
hextoraw( '00000000' ),
0, sysdate, sysdate );

insert into pending_sessions$
values( '7.8.85772',
1, hextoraw('05004F003A1500000104'),
'C', 0, 30258592, '',
146
);

commit;

插入相关记录。

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

如果ROLLBACK 不成功,可以尝试COMMIT

 

參考:

http://www.oraclefans.cn/forum/showblog.jsp?rootid=7153&op=allcomm

http://blog.oraclefans.cn/baishan1/entry/dba%E6%97%A5%E8%AE%B0_%E7%AC%AC%E4%B8%80%E9%83%A8_%E8%A1%A5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值