[firebase-br] Conflito de Updates
Sandro Souza
escovadordebits em gmail.com
Qua Maio 20 11:41:19 -03 2009
Bom dia/tarde Alex.
Grande Alex, infelizmente dead locks são uma realidade em situações em que
há muita concorrência de alterações nas mesmas tabelas, como parece ser o
seu caso.
Nos casos em que me deparei com esse tipo de situação, eu tive que usar o
algoritmo de "matar pelo cansaço". :D
Seria algo mais ou menos assim:
// Laço infinito para efetuar os processamentos até conseguir.
repeat
try
// Inicia a transação.
...(StartTransaction;)
// Faz todos os processamentos desejados.
...
// Efetiva a transação.
...(Commit;)
// Funcionou, pode sair do laço.
break;
except
on E: Exception do
begin
// Cancela a transação atual.
...(Rollback;)
// Não foi qualquer mensagem relativa á chave primária ou a algum
possível deadlock?
if (Pos('deadlock', LowerCase(E.Message)) + Pos('pk_',
LowerCase(E.Message))) = 0 then
// Propaga a exceção, já que se trata de uma situação não esperada.
raise;
end; // on Exception
end; // try-finally
until False;
Dessa forma, consegui executar as operações que eu necessitava, insistindo
até conseguir, "matando pelo cansaço".
Essa idéia não serve apenas para o Firebird, serve para qualquer SGBD.
Espero ter ajudado mais que atrapalhado. :D
2009/5/20 Alex Miranda de Oliveira <alexsistemass em gmail.com>
>
> E Um deadLock so que não tem a mensagem completa
> mas vou conseguir e colocar aqui preciso muito resolver
> esses problemas de deadlock..
>
>
>
>
> 2009/5/20 Sandro Souza <escovadordebits em gmail.com>
>
> Bom dia/tarde Alex.
>>
>> Grande Alex, você poderia informar a mensagem completa de erro retornada
>> pelo banco de dados?
>>
>> Seria algum dead lock ou outro tipo de erro?
>>
>> Assim que você postar a mensagem completa de erro poderemos te ajudar.
>>
>> Ficamos no aguardo.
>>
>> 2009/5/20 Alex Miranda de Oliveira <alexsistemass em gmail.com>
>>
>>> Criei no meu sistema algumas triggers para atualizar o saldo de credito
>>> do
>>> cliente
>>>
>>> so que as vezes ocorre conflito de updates ...
>>>
>>>
>>> Gostaria de saber como eu faço para que não ocorra conflitos de updates
>>> no
>>> sistema
>>> se teria jeito eu fazer um tratamento na trigger ou no sistema para que
>>> isso
>>> nao ocorra
>>>
>>>
>>> Eu uso delphi com firebird componentes de acesso a dados Fibplus
>>>
>>> Exemplo de Cenario:
>>>
>>>
>>> Quando se faz uma venda automaticamente a trigger e disparada para a
>>> atualizar o
>>> saldo de credito do cliente..
>>>
>>> so que quando ocorre este conflito acho que tem alguem usando o registro
>>> do
>>> cliente pelo cadastro do sistema ou por outra venda que disparou a
>>> trigger
>>>
>>> so iniciante em transações..
>>>
>>>
>>> Conto com a colaboração de voces...
>>> ______________________________________________
>>> 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