Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Как завершить распределенную транзакцию принудительно : Oracle

27.04.2024 16:21


24.11.2023 19:11
OlegON
 
Столкнулся с тестированием обновления базы с 11 на 19 версию, а, поскольку база была сделана клонированием виртуалки выяснилось, что часть транзакций, нацеленных куда-то в линки, оказались несогласованными. И на это обращает внимание dbua.

Соответственно, рассказываю, как их завершить. Для начала их определяем
SQL код:
SELECT LOCAL_TRAN_IDGLOBAL_TRAN_IDSTATEMIXEDCOMMIT# 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_TRANSWHERE LOCAL_TRAN_ID '22.21.143456'
DELETE FROM SYS.PENDING_SESSIONSWHERE LOCAL_TRAN_ID ='22.21.143456' 
DELETE FROM SYS.PENDING_SUB_SESSIONSWHERE LOCAL_TRAN_ID '22.21.143456';
COMMIT
Часовой пояс GMT +3, время: 16:21.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.