[firebase-br] DeadLock on LINUX server

diego abib diego em bredas.com.br
Seg Jun 19 15:41:33 -03 2017


Olá Gladiston Santan, agradeço muito as explicações e vou reanalisar os 
procedimentos, redefinir as necessidades e refazer algumas partes de 
código. Qualquer dúvida entrarei em contato.

Muito Grato. Diego.


Em 19/06/2017 09:34, Gladiston Santana escreveu:
> A principio pela mensagem de erro, não é um erro.
> Quando mais de uma pessoa tenta acessar um recurso (ex um registro) que
> está em uso por outra pessoa, a mensagem então aparece.
>
> A resolução do programa envolve entender a tela em que isso acontece e que
> tipo de isolamento se precisa ali.
> Por exemplo, se for um relatório ou pesquisa, talvez a leitura do tipo
> dirty read ou snapshot seja conveniente porque não faria esse tipo de lock.
> Mas se for uma tela de bilhetagem, um readcommit - que as vezes é chamado
> de lock pessimista - seria conveniente porque daria essa mensagem de erro
> que reportou quando duas ou mais pessoas tentassem comprar um bilhete cuja
> compra ja esta em andamento por outra pessoa. Seu exemplo usa esse tipo de
> isolamento.
> Usar o lock pessimista em todas as telas pode gerar um sistema mal
> programado onde o usuário sai para tomar um café e essa mensagem de erro
> aparece para os demais. Ou então um relatórios enquanto ainda estão em
> preparação faz os demais terem de esperar o termino para prosseguir com um
> COUNT, SUM e coisas do mundo SQL. Mas só sistemas mal programados são assim.
>
> inte+
> PS: O servidor ser Linux ou Windows pode apenas ser uma triste
> coincidencia. Não sei se o modo classic ou superserver teria efeitos
> diferentes em ambos os sistemas, mas verifique se o modo é o mesmo nos dois
> sistemas.
>
> Em 14 de junho de 2017 16:17, diego abib <diego em bredas.com.br> escreveu:
>
>> Olá, migrei uma pequena aplicação que tenho do Delphi 7 para o Delphi XE e
>> as Transações quando estão rodando em um servidor LINUX começaram a dar
>> Erro de:  SQL Server Error: /lock conflict on no wait transaction/.
>> deadlock.
>>
>> A mesma aplicação quando roda em servidor WINDOWS não dá a mensagem de
>> erro.
>>
>> Estou usando o firebird 2.07 com DBEXpress.
>>
>> No Delphi faço da seguinte forma:
>>
>>
>>     transacao : TDBXTransaction;
>>
>>     if connection.InTransaction then
>>       exit;
>>     transacao := connection.BeginTransaction(TDBXIsolations.ReadCommitted);
>>       execução de comandos;
>>     connection.CommitFreeAndNil(Transacao);
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html





Mais detalhes sobre a lista de discussão lista