Oracle Database Link - Kill Pending Transactions

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

1)
Purge ⇒ Expurgo