Столкнулся с тестированием обновления базы с 11 на 19 версию, а, поскольку база была сделана клонированием виртуалки выяснилось, что часть транзакций, нацеленных куда-то в линки, оказались несогласованными. И на это обращает внимание dbua.
Соответственно, рассказываю, как их завершить. Для начала их определяем
SQL код:
SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, COMMIT# FROM DBA_2PC_PENDING;
если статус PREPARED, то транзакцию можно принудительно откатить
SQL код:
ROLLBACK FORCE '22.21.143456'
если какой-то другой статус, то rollback ругнется на несуществующую транзакцию и можно просто скинуть ее состояние
SQL код:
EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('22.21.143456');
в некоторых других случаях может помочь либо
SQL код:
EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('22.21.143456');
либо
SQL код:
DELETE FROM SYS.PENDING_TRANS$ WHERE LOCAL_TRAN_ID = '22.21.143456';
DELETE FROM SYS.PENDING_SESSIONS$ WHERE LOCAL_TRAN_ID ='22.21.143456' ;
DELETE FROM SYS.PENDING_SUB_SESSIONS$ WHERE LOCAL_TRAN_ID = '22.21.143456';
COMMIT;