Ferramentas do usuário

Ferramentas do site


oracledblinkkillpendingtransactions

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:

  • Forçar o commit ou rollback:
 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:

  • ROLLBACK:
 select 'ROLLBACK FORCE ''' || LOCAL_TRAN_ID || ''';' from dba_2pc_pending;
  • COMMIT:
 select 'COMMIT FORCE ''' || LOCAL_TRAN_ID || ''';' from dba_2pc_pending;
  • Purge Lost Transactions:
 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
oracledblinkkillpendingtransactions.txt · Última modificação: 08/02/2024 06H:43 por admin