[firebase-br] Travamento Otimista ou Pessimista

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


  Mais blz então, eu vou ver o que posso fazer.

  Obrigado a todos pela atenção
  Marciano Bandeira


  ----- Original Message -----
  From: "Adriano Gomes" <firebase em ig.com.br>
  To: <lista em firebase.com.br>
  Sent: Thursday, January 13, 2005 10:33 AM
  Subject: Re: [firebase-br] Travamento Otimista ou Pessimista


  > Existe travamento otimista sim. Na configuração do transaction não
coloque o
  > parametro nowait. Mas cai no problema de uma estacao iniciar um update e
  > todas as outras "travarem" esperando o commit dela.
  >
  > "Marciano Bandeira"
  > <marciano.bandeira em bol.com.br> wrote in message
  > news:002301c4f968$f425a7c0$0801a8c0 em Marciano...
  >   Obrigado pela resposta.
  >
  >   Nas vendas eu gravo tudo em tabelas temporárias e na hora de finalizar
é
  > feita a baixa de estoque...
  >   ... Então quer dizer que não existe o travamento otimista de registro?
  > nisso é igual ao piradox, travamento pessimista?
  >
  >   // Desculpem a pergunta Off
  >   Isso tbm ocorre em outros bancos de dados tbm? ex: SqlServer
  >
  >   Obrigado pela atenção
  >   Marciano Bandeira
  >
  >
  >
  >   ----- 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






Mais detalhes sobre a lista de discussão lista