ORA-1591 (分布式事务处理案例)

今天一个朋友遇到的问题,告警日志中出现如下信息:

ORA-1591:lockheldbyin-doubtdistributedtransaction1.92.66874

查询dba_2pc的表,发现没有分布式事务信息:

selectlocal_tran_id,statefromdba_2pc_pending where local_tran_id='1.92.66874';

no rowsselected

但是去查实际的rollback segment信息,却发现有prepared状态的分布式事务存在:

SELECTKTUXEUSN,KTUXESLT,KTUXESQN,/* Transaction ID */   

    KTUXESTA Status,KTUXECFL FlagsFROM x$ktuxeWHERE ktuxesta!='INACTIVE'AND ktuxeusn=1;

 

 KTUXEUSN  KTUXESLT  KTUXESQN STATUS          FLAGS

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

        1        92     66874 PREPARED        SCO|COL|REV|DEAD

我们无法做commit force或者rollback force:

rollbackforce'1.92.66874';

ORA-02058:no preparedtransactionfoundwithID1.92.66874

遇到这种情况,只能制造虚假数据,再模拟清理未提交的分布式事务;

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
  ('1.92.66874', /* <== 此处为你的local tran id */
   306206, /*                                         */
   'XXXXXXX.12345.1.2.3', /*  这些值不必更改,   */
   'prepared',
   'P', /*  是静态参数,可以直接   */
   HEXTORAW('00000001'), /*  在这个sql中使用                             */
   HEXTORAW('00000000'), /*                                         */
   0,
   SYSDATE,
   SYSDATE);
 
INSERT INTO PENDING_SESSIONS$
VALUES
  ('1.92.66874', /* <==此处为你的local tran id  */
   1,
   HEXTORAW('05004F003A1500000104'),
   'C',
   0,
   30258592,
   '',
   146); 
commit;


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


QQ:49904358


http://space.itpub.net/14941137/spacelist-blog


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值