while trying to commit distibuted transaction faced with «free global transaction table entry»
solution foud at mos 549307.1
define local_tran_id:
var numtransact varchar2(100) begin :numtransact:='5.31.1099960'; end; /
use mos note to force commit transaction:
set transaction use rollback segment SYSTEM;
delete from sys.pending_trans$
where local_tran_id = :numtransact;
delete from sys.pending_sessions$ where local_tran_id = :numtransact;
delete from sys.pending_sub_sessions$ where local_tran_id = :numtransact;
commit;
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( :numtransact,
306206,
'XXXXXXX.12345.1.2.3',
'prepared','P',
hextoraw( '00000001' ),
hextoraw( '00000000' ),
0, sysdate, sysdate );
insert into pending_sessions$
values( :numtransact,
1, hextoraw('05004F003A1500000104'),
'C', 0, 30258592, '',
146
);
commit;
begin
DBMS_TRANSACTION.COMMIT_FORCE (:numtransact);
commit;
end;
/
transaction state changed to forced commit ( or commit forced =) ), after that purge transcation entry
exec DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('5.31.1099960'); --local tran id
1 комментарий
select ' commit force '''||local_tran_id||''';' from dba_2pc_pending ; --select ' rolback force '''||local_tran_id||''';' from dba_2pc_pending ; select 'exec DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('''||local_tran_id||'''); commit;' from dba_2pc_pending ;