[firebase-br] RES: Deadlock update conflicts

Kelver Merlotti kmerlotti em gmail.com
Qua Jan 16 14:07:25 -03 2013


Boa tarde Jonas!
Acho que você não conseguirá fazer isso, pois a SP entra no mesmo contexto
transacional em que foi disparada e, até onde sei, ainda não existe
transação autônoma no FB.
Minha sugestão é fazer a trigger chamar a SP que atualiza o saldo e, no
final dela, fazer algo como:

WHEN ANY DO --tratamento de exceção
BEGIN
  Sleep(1000); -- usa alguma UDF pra segurar o processo por algum tempo
  -- aqui, ou você chama de novo a SP ou bota o produto
  -- numa fila de recálculo pra processa-lo mais tarde
END

Um abraço,

*Kelver Merlotti*
Gerente de Treinamentos da Embarcadero do Brasil
Coordenador Editorial da Active Delphi
Twitter: http://www.twitter.com/kmerlotti


2013/1/16 Jonas Rodrigo Pacheco <jonas.pacheco em tecnicon.com.br>

>
> Obrigado Gladiston Santana!
>
> 'Manipular' o modo de isolamento da transação dentro de uma store
> procedure, alguém tentou algo do gênero?
>
> Jonas Rodrigo Pacheco
>
> -----Mensagem original-----
> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Gladiston
> Santana
> Enviada em: quarta-feira, 16 de janeiro de 2013 09:36
> Para: FireBase
> Assunto: Re: [firebase-br] Deadlock update conflicts
>
> Existem comandos SQL que trocam o isolamento e transação apenas use-a.
> Se não conseguir usá-los em trigger e realmente pode haver uma limitação
> quanto a isso, pois a trigger em geral herda o mesmo isolamento de quem a
> disparou. Então voce talvez tenha de modificar sua trigger  para disparar
> uma SP e dentro da SP voce trata o isolamento adequado, contudo, o
> isolamento deve levar em consideração as transações correntes e se todas as
> demais tem nowait então a própria SP quebraria a conexão de outros pelo
> tempo em que estivesse rodando até o commit. Leve isso em consideração.
>
> E se ainda assim o FB não te deixar mudar o isolamento por causa da
> herança da conexão então a alternativa que vejo de imediato é disparar a SP
> diretamente, sem envolvimento da trigger.
>
> inte+
>
>
> Gladiston Santana
> Departamento de TI
> Grupo Vidy
> Tel (11) 4787-3122 ramal 228
> Rod. Régis Bittencourt 3360 - Km 272,5
> Taboão da Serra - SP - CEP: 06793-000
> Visite nosso site: www.vidy.com.br
> Visite também : www.expolabor.com.br
>
>
>
>
> Em 15 de janeiro de 2013 17:15, Jonas Rodrigo Pacheco <
> jonas.pacheco em tecnicon.com.br> escreveu:
>
> > Senhores,
> >
> > A conexão da aplicação com o Firebird é do tipo nowait, pois em caso
> > de concorrência entre os usuários, é importante que ocorra o deadlock.
> >
> > Nesta mesma estrutura, usamos algumas triggers para manter o saldo de
> > estoque atualizado, porém elas raramente apresentam o erro:
> > Deadlock
> > update conflicts witch concurrent update concurrent transaction number
> > is XXXXXX At trigger 'T_SALDO_XXXXX'
> >
> > Porém, quando se trata de uma trigger de saldo, é importante que ela
> > aguarde e/ou fique tentando executar o comando para manter-se o saldo
> > consolidado.
> >
> > Alguém possui alguma sugestão/alternativa para essa situação? Por
> > favor, disponibilize um exemplo.
> >
> > Pensei em implementar algo parecido com o que está no link:
> > http://mail.firebase.com.br/pipermail/lista_firebase.com.br/2009-May/0
> > 61214.html, mas não ficou muito claro se é possível/como  implementar
> > isso dentro de uma trigger do Firebird.
> >
> > Desde já agradeço a atenção de todos!
> >
> > Jonas R. Pacheco
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
> saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista