Usei um link de banco de dados para conectar a outro banco de dados e excluir alguns registros. Posteriormente, executei um Informatica Workflow (ferramenta ETL) para carregar dados nesse banco de dados usando uma conexão de banco de dados que se conecta diretamente a ele.
O fluxo de trabalho não confirmou nenhum registro desde 2 horas (deveria ser executado por apenas 30 minutos ou mais ...), então acho que é porque não consegui executar "commit" usando o link do banco de dados. Os logs das ferramentas ETL não fornecem nenhum erro ou informações de depuração neste ponto.
Alguma idéia de como eu poderia depurar isso ..? Executei outro processo ETL para atualizar uma tabela e, em seguida, executei o commit. Mas, mesmo depois disso, o primeiro processo continua em execução sem confirmar nenhum registro. Eu não sou um especialista em DBA, então provavelmente estou interpretando mal o comportamento do banco de dados. Obrigado!
Como você está usando um link de banco de dados Oracle-para-Oracle padrão, o Oracle faz automaticamente commits de duas fases. Se você confirmar (ou reverter) em um sistema, todas as alterações feitas como parte da mesma transação no outro sistema também serão confirmadas (ou revertidas).
Se houver uma transação aberta no sistema remoto que tenha bloqueios em nível de linha, isso implica fortemente que a sessão local ainda está lá também. Então provavelmente você só precisa fazer um
commit
(ou umrollback
) na sessão local para remover os bloqueios.Se o processo ETL estiver realmente parado aguardando bloqueios retidos pela outra sessão, você poderá consultar
gv$session
o banco de dados remoto e ver se a sessão que o aplicativo ETL está executando está aguardando a contenção de bloqueio em nível de linha. Especificamente, você esperaria ver umevent
deenq: TX - row lock contention
emgv$session
. Você também esperaria que, se perguntassedba_blockers
, veria o ID da sessão que se conectou do banco de dados local pelo link do banco de dados e que, se perguntassedba_waiters
, veria que a sessão do processo ETL foi bloqueada por essa sessão.