Erro ORA-30926 em update

Forum exclusivo voltado ao Oracle Exadata
  

Mensagemem Qui, 17 Jan 2019 1:20 pm

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:

Código: Selecionar todos
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?
souldeath
Localização: Limeira

Mensagemem Sex, 18 Jan 2019 7:35 pm

Vou mover este topico para EXADATA.
dr_gori
Localização: Portland, OR USA

Thomas F. G

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



Voltar para DBA Exadata

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante