Como resolver ORA-14450: attempt to access a transactional temp table already in use Tabela temporária Oracle

Um erro que pode incomodar bastante durante a atualização de uma tabela temporária é o :

ORA-14450: attempt to access a transactional temp table already in use

A mensagem apesar de clara pode ser difícil de tratar caso você não consiga identificar e/ou derrubar todas as sessões conectadas. Dessa forma, caso deseje “forçar” a alteração de uma tabela desse tipo, siga os seguintes passos:

  1. Execute o comando
    lock table <SCHEMA>.<TABELA_TEMPORARIA> in exclusive mode;
  2. Desconecte da sessão e conecte novamente no Banco (Ex: utilizando Sql Tools ou PLSQL Developer)
  3. Após conectado execute a seguinte Query:
    SELECT * FROM v$lock WHERE id1 = (SELECT object_id FROM all_objects WHERE owner =<SCHEMA> AND object_name =<TABELA_TEMPORARIA>);
    
  4. Ao identificar uma linha nesse select, vamos proceder “matando” a sessão:
    ALTER SYSTEM KILL SESSION '<sid>,<serial#>';
  5. Depois de executado o comando KILL e confirmado sua execução com sucesso, você poderá executar o comando DDL desejado:
    ALTER TABLE <SCHEMA>.<TABELA_TEMPORARIA> MODIFY(COLUNA NUMBER (20,0));
  6. Por fim, libere o lock realizado no passo1 através do comando:
    rollback;

E só 😉


One Comment

  • Ana Lúcia |

    E quando não há nenhuma sessão e o problema persiste?
    Estou com um BD que apenas eu uso. Mesmo assim, pedi ao DBA que matasse qualquer sessão existente (que por erro tivesse ficado presa, não sei…). Ele me garante que não há nada… mas o erro persiste. Que fazer ?

So, what do you think ?