Olá, nesse artigo apresento a sintaxe necessária para encerrarmos as conexões perdidas que foram iniciadas através de database link.
Abaixo a query que pode ser utilizada para identificar as transações que estão pendentes e que foram iniciadas através de database link:
select * from dba_2pc_pending order by fail_time;
Com os valores da coluna LOCAL_TRAN_ID podemos então seguir com a operação desejada:
ROLLBACK FORCE '57.4.16809488';
COMMIT FORCE '57.4.16809488';
Caso receba a mensagem de erro abaixo, então será necessário realizarmos o expurgo das transações pendentes:
ERROR at line 1: ORA-02058: no prepared transaction found with ID 96.22.163456
Sintaxe do comando de purge 1):
EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('57.4.16809488');
Abaixo deixo uma query que irá gerar a saída necessária a ser executada caso haja muitas transações pendentes:
select 'ROLLBACK FORCE ''' || LOCAL_TRAN_ID || ''';' from dba_2pc_pending;
select 'COMMIT FORCE ''' || LOCAL_TRAN_ID || ''';' from dba_2pc_pending;
select 'EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY(''' || LOCAL_TRAN_ID || ''');' from dba_2pc_pending;
- Até a próxima.
— Autor: Leonardo Lopes 08/02/2024 06H:43