Erro ORA-30926 em update

Forum exclusivo voltado ao Oracle Exadata
Responder
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

Recentemente um de nossos clientes que usa o Oracle 12c rodando em Exadata começou a receber esse erro:
ORA-30926: unable to get a stable set of rows in the source tables
Cause: A stable set of rows could not be got because of large dml activity or a non-deterministic where clause.
Action: Remove any non-deterministic where clauses and reissue the dml.
Pelo que pesquisei é um erro mais comum de acontecer em um merge, mas nunca tinha visto em um update.

Esse é o SQL que faz o update:

Selecionar tudo

UPDATE available_numbers_view n
SET    n.id_transact = ?,
       n.date_updated =?
WHERE  ROWNUM <=?
AND    n.uid =?
AND    n.region_code =?
AND    n.status =?
AND    n.blocked =?
AND    n.reserved IS NULL
O processo executado pela aplicação procura um número disponível nessa tabela e o reserva atualizando o campo id_transact e o Rownum é filtrado com 1.

O problema disso é que a aplicação tem múltiplas instâncias e esse processo começou a ser executado com uma frequência muito alta, gerando problemas de lock e vários eventos de "enq: TX - row lock contention" foram observados no AWR.

Isso é devido ao update retornar sempre o mesmo registro na clausula where e várias instancias tentando atualizar o mesmo registro.

Eu usei uma solução não muito elegante, fazendo um select e ordenando os resultados com dbms_random.value e filtrando por rownum ao final para garantir que as instancias não tentem atualizar o mesmo registro.

O design da aplicação não permite utilizar o select for update skip locked, que seria uma alternativa melhor.

Alguém já enfrentou um problema parecido?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Vou mover este topico para EXADATA.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes