Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: lock held by in-doubt distributed transaction
For all / any that are interested Oracle Support fixed my problem by
inserting dummy rows into pending_trans$ and pending_sessions$
They recommend the following note, but none of the scenarios here require
what they advocated in our case: Note: 126069.1 Manually Resolving
In-Doubt Transactions
but anyway, here's what happened:
SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */
2 KTUXESTA Status,
3 KTUXECFL Flags
4 FROM x$ktuxe WHERE ktuxesta!='INACTIVE' AND ktuxeusn= 4;
KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS
---------- ---------- ---------- ---------------- ------------------------ 4 18 4935 PREPARED SCO|COL|REV|DEAD
SQL> insert into pending_trans$
2 (
LOCAL_TRAN_ID,GLOBAL_TRAN_FMT,GLOBAL_ORACLE_ID,STATE,STATUS,SESSION_VECTOR,RECO_VECTOR,TYPE#,FAIL_TIME,RECO_TIME)
3 values( '4.18.4935',306206, /* */ 'XXXXXXX.12345.1.2.3', /* These
values can be used without any */
4 'prepared','P', /* modification. Most of the values are */
5 hextoraw( '00000001' ), /* constant. */
6 hextoraw( '00000000' ), /* */
7 0, sysdate, sysdate );
1 row created.
SQL> insert into pending_sessions$ values('4.18.4935',1, 2 hextoraw('05004F003A1500000104'),'C',0,30258592,'',146);
1 row created.
commit;
SQL> select * from pending_sessions$
LOCAL_TRAN_ID SESSION_ID
---------------------- ----------
- ---------- ----------------
4.18.4935 1 05004F003A1500000104 C 0 30258592 146
SQL> select * from pending_trans$;
LOCAL_TRAN_ID GLOBAL_TRAN_FMT
---------------------- ---------------GLOBAL_ORACLE_ID
---------------- - - -------- -------- ---------- ------------------ HEURISTIC_TIME RECO_TIME TOP_DB_USER ------------------ ------------------ ------------------------------TOP_OS_USER
GLOBAL_COMMIT# SPARE1 SPARE2 SPARE3 ---------------- ---------- ------------------------------ ----------SPARE4
4.18.4935 306206XXXXXXX.12345.1.2.3
prepared P 00000001 00000000 0 10-FEB-05 10-FEB-05
SQL> rollback force '4.18.4935';
Rollback complete.
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('4.18.4935');
BEGIN DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('4.18.4935'); END;
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode ORA-06512: at "SYS.DBMS_TRANSACTION", line 65 ORA-06512: at "SYS.DBMS_TRANSACTION", line 85 ORA-06512: at line 1
SQL> select count(*) from tracking.tracked_lacosa_backend_request; select count(*) from tracking.tracked_lacosa_backend_request
*
SQL> alter session set "_smu_debug_mode" = 4;
Session altered.
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('4.18.4935');
PL/SQL procedure successfully completed.
SQL> select count(*) from tracking.tracked_lacosa_backend_request; select count(*) from tracking.tracked_lacosa_backend_request
*
----************* Notice here the transaction id changed *************
SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */
2 KTUXESTA Status,
3 KTUXECFL Flags
4 FROM x$ktuxe WHERE ktuxesta!='INACTIVE' AND ktuxeusn= 10;
KTUXEUSN KTUXESLT KTUXESQN STATUS FLAGS
---------- ---------- ---------- ---------------- ------------------------ 10 15 4693 PREPARED SCO|COL|REV|DEAD
SQL> insert into pending_trans$ (
LOCAL_TRAN_ID,GLOBAL_TRAN_FMT,GLOBAL_ORACLE_ID,
2 STATE,STATUS,SESSION_VECTOR,RECO_VECTOR,TYPE#,FAIL_TIME,RECO_TIME)
3 values( '10.15.4693',
4 306206, /* */
5 'XXXXXXX.12345.1.2.3', /* These values can be used without any */
6 'prepared','P', /* modification. Most of the values are */
7 hextoraw( '00000001' ), /* constant. */
8 hextoraw( '00000000' ), /* */
9 0, sysdate, sysdate );
1 row created.
SQL> insert into pending_sessions$ values('10.15.4693',1, 2 hextoraw('05004F003A1500000104'),'C',0,30258592,'',146);
1 row created.
SQL> commit;
Commit complete.
SQL> rollback force '10.15.4693';
Rollback complete.
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('10.15.4693');
PL/SQL procedure successfully completed.
SQL> select count(*) from tracking.tracked_lacosa_backend_request;
COUNT(*)
98697
Yee Ha!
Tony
"Powell, Mark D" <mark.powell_at_eds.com>
02/09/2005 02:13 PM
To
"'Tony.Adolph_at_o2.com'" <Tony.Adolph_at_o2.com>, oracle-l_at_freelists.org
cc
Subject
RE: lock held by in-doubt distributed transaction
Is tracking.tracked_lacosa_request a local table or remote? If remote did you check the dba_pending* views on the remote system. The bug I was thinking of showed entries in the pending views but your problem does not so it is likely a different bug.
I checked metalink for the ORA-01591error and got around 47 hits. I glanced at a few but I did not see a perfect match. I think you will need to open an iTAR and get help directly from Oracle. Please let the board know how this is resolved.
HTH -- Mark D Powell --
-----Original Message-----
From: Tony.Adolph_at_o2.com [mailto:Tony.Adolph_at_o2.com]
Sent: Wednesday, February 09, 2005 3:37 AM
To: mark.powell_at_eds.com
Cc: oracle-l_at_freelists.org; oracle-l-bounce_at_freelists.org
Subject: RE: lock held by in-doubt distributed transaction
Hi Mark,
Thanks for the feedback. I tried...
SQL> alter session set "_smu_debug_mode" = 4;
Session altered.
SQL> exec dbms_transaction.purge_lost_db_entry('4.18.4935'); BEGIN dbms_transaction.purge_lost_db_entry('4.18.4935'); END;
*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception ORA-06512: at "SYS.DBMS_TRANSACTION", line 94 ORA-06512: at line 1
:-(
Tony
"Powell, Mark D" <mark.powell_at_eds.com>
Sent by: oracle-l-bounce_at_freelists.org
02/08/2005 06:48 PM
Please respond to
mark.powell_at_eds.com
To
oracle-l_at_freelists.org
cc
Subject
RE: lock held by in-doubt distributed transaction
I believe this is a bug. The first solution I saw was support telling people to convert their systems to using regular rollback segments but I believe that you can issue ' alter session set "_smu_debug_mode" = 4; ' to get around the problem. I do not have the bug number so before you alter your session you may want to check metalink on the hidden parameter. HTH -- Mark D Powell --
-----Original Message-----
From: oracle-l-bounce_at_freelists.org
[mailto:oracle-l-bounce_at_freelists.org]On Behalf Of Tony.Adolph_at_o2.com
Sent: Tuesday, February 08, 2005 11:55 AM
To: oracle-l_at_freelists.org
Cc: Maxim.Demenko_at_o2.com
Subject: lock held by in-doubt distributed transaction
Hi folks,
One of our developers has just reported this error after a simple select:
select COUNT(*) FROM tracking.tracked_lacosa_request
*
So I looked for the in doubt transaction as follows:
select * from dba_2pc_neighbors;
and
select * from dba_2pc_pending;
but both returned no rows.
I tried the same query and also get the same error. I bounced the database (immediate) and still get the error and all the time with the same transaction id 4.18.4935. I got the developers to bounce their jboss
but no joy.
I tried dbms_transaction.purge_lost_db_entry:
SQL> exec dbms_transaction.purge_lost_db_entry('4.18.4935'); BEGIN dbms_transaction.purge_lost_db_entry('4.18.4935'); END;
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode ORA-06512: at "SYS.DBMS_TRANSACTION", line 65 ORA-06512: at "SYS.DBMS_TRANSACTION", line 85 ORA-06512: at line 1
Any ideas folks?
Cheers
Tony
-- http://www.freelists.org/webpage/oracle-l -- http://www.freelists.org/webpage/oracle-l -- http://www.freelists.org/webpage/oracle-lReceived on Thu Feb 10 2005 - 10:29:46 CST
![]() |
![]() |