[firebase-br] Travamento Otimista ou Pessimista

Marciano Bandeira marciano.bandeira em bol.com.br
Qui Jan 13 13:17:22 -03 2005


  Obrigado pela resposta

  Mais uma vez, obrigado a todos que responderam.

  Valew amigo
  Marciano Bandeira


  ----- Original Message -----
  From: "Francisco Thiago de Almeida" <jeandeadlucky em yahoo.com.br>
  To: "FireBase" <lista em firebase.com.br>
  Sent: Thursday, January 13, 2005 10:53 AM
  Subject: Re: [firebase-br] Travamento Otimista ou Pessimista


  > O Cache que eu falo, não seria no próprio Firebird.. usando O Commit e
  > Rollback.. Seria localmente usando ClientDataSet.. Porque pelo pouco que
  > entendo de bancos, acho que isso você não vai encontrar em banco
nenhum...
  > sempre vai dar DeadLock, pois você está querendo atualizar o mesmo
registro
  > duas vezes.. o que é impossível..
  >
  > Espero estar ajudando
  >
  > Thiago
  > ----- Original Message -----
  > From: "Marciano Bandeira" <marciano.bandeira em bol.com.br>
  > To: "FireBase" <lista em firebase.com.br>
  > Sent: Thursday, January 13, 2005 10:35 AM
  > Subject: Re: [firebase-br] Travamento Otimista ou Pessimista
  >
  >
  >   Obrigado pela atenção
  >
  >   É exatamente isso que eu fasso, esses DeadLock então tem que ser eu
que
  > tenho que contornar o Firebird não tem esses recursos?
  >
  >   Desde ja agradeço
  >   Marciano Bandeira
  >
  >
  >   ----- Original Message -----
  >   From: "Francisco Thiago de Almeida" <jeandeadlucky em yahoo.com.br>
  >   To: "FireBase" <lista em firebase.com.br>
  >   Sent: Thursday, January 13, 2005 10:06 AM
  >   Subject: Re: [firebase-br] Travamento Otimista ou Pessimista
  >
  >
  >   > Olha, eu não sei exatamente o seu problema ae.. mas considerando que
uma
  >   > venda só será efetuada no final da venda, acredito que você deveria
  > deixar
  >   > estas opções em cache e só no final da venda atualizar estoque e
tudo o
  >   > mais.
  >   > Assim você reduziria o tempo em que as transações ficariam abertas,
  > evitando
  >   > os DeadLock
  >   >
  >   > É isso ae
  >   >
  >   > Espero ter ajudado
  >   >
  >   > Thiago
  >   >
  >   > ----- Original Message -----
  >   > From: "Fabiano Arndt" <fabianoallex em hotmail.com>
  >   > To: <lista em firebase.com.br>
  >   > Sent: Thursday, January 13, 2005 9:45 AM
  >   > Subject: RE: [firebase-br] Travamento Otimista ou Pessimista
  >   >
  >   >
  >   > >E aí Marciano,
  >   > >
  >   > > Seguinte, meus comentários serão mais teóricos, não posso garantir
que
  > o
  >   > > firebird faça exatamente dessa forma:
  >   > >
  >   > > vc tem duas transações, T1 e T2
  >   > >
  >   > > 1 - T1 inicia a transação
  >   > > 2 - T1 inclui um item (atualiza estoque), T2 inicia a transacao
  >   > > 3 - T1 inclui um item (atualiza estoque), T2 inclui um item (tenta
  >   > > atualizar estoque - ERRO!!!)
  >   > > 4 - T1 comita
  >   > >
  >   > > na linha 2 vc inclui um item e automaticamente atualizou o
estoque, ao
  >   > > fazer isso vc bloqueo (lock) o registro onde está o valor do
estoque
  > (isso
  >   > > acontece exatamente pra evitar dados incossistentes), é como se vc
  > falase:
  >   > > "o registro é meu e ninguém mexe", outras transações poderao
modificar
  > o
  >   > > valor apenas quando a transação que deu lock no registro comitar o
dar
  > um
  >   > > rollback, na linha 2 ainda vc inicia outra transação (T2).
  >   > >
  >   > > na linha 3 T1 inclui outro item e atualiza o estoque novamente, e
T2
  >   > > também (de metido) tenta incluir um item e tenta atualizar o
estoque,
  > mas
  >   > > aí como T1 ainda está com o registro bloqueado ele fala: "Cara, o
  > registro
  >   > > é meu, sai fora" e aí retorna o erro......,
  >   > >
  >   > > na linha 4 T1 comita e desbloqueia o registro, ai qualquer um pode
  > mexer
  >   > > no registro do estoque.
  >   > >
  >   > > existe (ou deveria existir) uma forma de ao invés de dar um erro
na
  > linha
  >   > > 3, T2 ficar aguradando T1 comitar, e após então ele também
comitar,
  > mas
  >   > > isso faria com que a tela de quem disparou o T2 ficasse congelada
para
  > o
  >   > > usuário até que o usuário que disparou T1 comitase, o que também
não é
  >   > > legal,
  >   > >
  >   > > ficaria +- assim
  >   > >
  >   > > 1 - T1 inicia a transação
  >   > > 2 - T1 inclui um item (atualiza estoque), T2 inicia a transacao
  >   > > 3 - T1 inclui um item (atualiza estoque), T2 inclui um item (tenta
  >   > > atualizar estoque - aguarda)
  >   > > 4 - T1 inclui um item (atualiza estoque), T2 inclui um item (tenta
  >   > > atualizar estoque - aguarda)
  >   > > 4 - T1 comita, T2 comita
  >   > >
  >   > > mas aí vc poderia fazer apenas uma venda por vez, ou seja todos os
  >   > > terminais ficariam parados ate que o terminal que está fazendo a
venda
  >   > > terminasse a venda.
  >   > >
  >   > > o ideal então seria vc fazer assim:
  >   > >
  >   > > 1 - T1 inicia a transação
  >   > > 2 - T1 inclui um item (atualiza estoque)
  >   > > 3 - T1 comita
  >   > > 4 - T1 inicia a transação
  >   > > 5 - T1 inclui um item (atualiza estoque)
  >   > > 3 - T1 comita
  >   > >
  >   > > ou seja após incluir cada item vc comita e libera o registro,
assim se
  > por
  >   > > um acaso alguém tentar atualizar o estoque e o registro tiver
  > bloqueado, a
  >   > > transação não precisará esperar muito tempo e no final seus dados
  > estarao
  >   > > consistentes,
  >   > >
  >   > > isso pode funcionar com trigger ou sem trigger, o que importa é o
  > contexto
  >   > > da transação, seja numa trigger, seja no programa ou onde for....
ah
  >   > > lembrando que uma trigger sempre está no mesmo contexto da
transação
  > que a
  >   > > disparou.
  >   > >
  >   > > se alguém com maiores conhecimento ver que falei alguma besteira,
  > favor me
  >   > > corrija,
  >   > >
  >   > > Espero ter ajudado, qualquer duvida é só falar,
  >   > >
  >   > > []'s
  >   > > Fabiano.
  >   > >
  >   > >
  >   > >>From: "Marciano Bandeira" <marciano.bandeira em bol.com.br>
  >   > >>Reply-To: FireBase <lista em firebase.com.br>
  >   > >>To: "FireBase" <Lista em firebase.com.br>
  >   > >>Subject: [firebase-br] Travamento Otimista ou Pessimista
  >   > >>Date: Wed, 12 Jan 2005 16:41:52 -0200
  >   > >>
  >   > >>   Boa tarde a todos
  >   > >>
  >   > >>   Uma coisa está me esquentando a cabeça a algum tempo, estou
  >   > >> desenvolvendo um sistema de vendas com banco de dados firebird,
que
  >   > >> rodará em rede, até aí tudo blzinha
  >   > >>   Mais digamos que o produto 1 da tabela de produtos tenha o
estoque
  > 50,
  >   > >> aí o Terminal_1 vai e vende 10 unidades do Produto 1, mais antes
de
  >   > >> comitar (pois estará gravando outos items), o Terminal_2 vai e
vende
  > 5
  >   > >> unidades do produto 1 e Comita a transação, aí o estoque do
produto 1
  > cai
  >   > >> para 45, aí o Terminal_1 Comita a transação dele, como ficará o
  > estoque,
  >   > >> ele baixará para 35 que seria o correto, ou baixará para 40 que
era o
  > que
  >   > >> seria correto quando ele fez a gravação?
  >   > >>   OBS..: As baixas de estoque estou fazendo dentro de Triggers.
  >   > >>   OBS2: Tentei fazer o teste pelo IbExpert e ao tentar gravar o
Item
  > no
  >   > >> Segundo terminal antes de comitar o primeiro apareceu a seguinte
  >   > >> mensagem:
  >   > >>
  >   > >>   "Error Message:
  >   > >>   ----------------------------------------
  >   > >>   Unsuccessful execution caused by system error that does not
  > preclude
  >   > >> successful execution of subsequent statements.
  >   > >>   lock conflict on no wait transaction.
  >   > >>   deadlock.
  >   > >>   update conflicts with concurrent update."
  >   > >>
  >   > >>   Outra pergunda, se o Firebird/Interbase faz travamento otimista
de
  >   > >> registro porquê dessa mensagem?
  >   > >>
  >   > >>   Fica as duas perguntas no ar
  >   > >>   Agradeço a todos que poderem me ajudar
  >   > >>   Marciano Bandeira
  >   > >>   msn: cbndesenvolvimento em hotmail.com
  >   > >>   skype: marcianobandeira
  >   > >>
  >   > >>
  >   > >>______________________________________________
  >   > >>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
  >   > >>Para editar sua configuração na lista, use o endereço
  >   > >>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
  >   > >
  >   > > _________________________________________________________________
  >   > > MSN Messenger: converse online com seus amigos .
  >   > > http://messenger.msn.com.br
  >   > >
  >   > >
  >   > > ______________________________________________
  >   > > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
  >   > > Para editar sua configuração na lista, use o endereço
  >   > > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
  >   > >
  >   >
  >   >
  >   >
  >   >
  >   >
  >   > ______________________________________________
  >   > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
  >   > Para editar sua configuração na lista, use o endereço
  > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
  >
  >
  >
  > ______________________________________________
  > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
  > Para editar sua configuração na lista, use o endereço
  > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
  >
  >
  >
  >
  >
  > ______________________________________________
  > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
  > Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br






Mais detalhes sobre a lista de discussão lista