[firebase-br] Snapshot Table Stability
Rodrigo Pires
digaoblues em hotmail.com
Sex Jul 6 15:58:34 -03 2007
eu to fazendo algo parecido...
Propriedades da transacao:
Properties.Add('isc_tpb_consistency');
Properties.Add('isc_tpb_protected');
Properties.Add('isc_tpb_lock_read,'Tabela);
Properties.Add('isc_tpb_lock_write,Tabela);
[]s
>From: "Anticlei Scheid" <cleischeid em yahoo.com.br>
>Reply-To: FireBase <lista em firebase.com.br>
>To: "FireBase" <lista em firebase.com.br>
>Subject: Re: [firebase-br] Snapshot Table Stability
>Date: Fri, 6 Jul 2007 12:33:45 -0300
>
>Obrigado, mas acho que não expliquei direito.
>Já li documentação sobre transações tanto no site Firebase, o qual sempre
>que tenho oportunidade elogio por se tratar de uma fonte muito boa para
>aprender mais e trocar informações, quanto em livros e outras documentações
>que encontro na Internet.
>Sempre tomo o cuidado de envolver os processos em transações, uso Read
>Committed e tudo funciona muito bem e sem nenhum problema de concorrência
>até hoje.
>Se o saldo em estoque fosse gravado num registro com certeza o problema já
>estaria resolvido, mas o saldo em estoque não é gravado num registro,
>sempre
>é calculado somando os movimentos de entrada e subtraindo os movimentos de
>saída ao último fechamento de cada item, ou seja, no banco de dados
>guardamos dados, não informações, e o saldo atual de estoque é uma
>informação não um dado, portando não deve ser gravado no banco, por isso
>usamos a abordagem do cálculo exlicado acima.
>O que pretendo evitar é que outra transação inclua algum registro de saída
>de um mesmo item em comum às duas transações na tabela de movimentos antes
>que a transação termine, só isso.
>Já fiz bastante pesquisa antes de perguntar aqui na lista e já li sobre uma
>instrução, que está inclusive na documentação do Interbase também, com a
>seguinte sintaxe :
>
>SET TRANSACTION
>Starts a transaction and optionally specifies its behavior. Available in
>SQL, DSQL, and isql.
>
>Syntax SET TRANSACTION [NAME transaction]
>
>[READ WRITE | READ ONLY]
>
>[WAIT | NO WAIT]
>
>[[ISOLATION LEVEL] {SNAPSHOT [TABLE STABILITY]
>
>| READ COMMITTED [[NO] RECORD_VERSION]}]
>
>[RESERVING <reserving_clause>
>
>| USING dbhandle [, dbhandle .]];
>
><reserving_clause> = table [, table .]
>
>[FOR [SHARED | PROTECTED] {READ | WRITE}] [, <reserving_clause>]
>
>Eu só não sei como utilizar, pois fiz alguns testes "chutando" como
>utilizá-la e não acertei.
>
>Obrigado.
>
>----- Original Message -----
>From: "Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br>
>To: "FireBase" <lista em firebase.com.br>
>Sent: Friday, July 06, 2007 9:22 AM
>Subject: Re: [firebase-br] Snapshot Table Stability
>
>
>Vc não precisa usar "table stability" para garantir isso. Qualquer
>isolamento transacional no firebird impede que 2 transações alterem o
>mesmo registro ao mesmo tempo.
>
>Faça a atualização do estoque através de um trigger, e estará tudo
>resolvido, mesmo usando Read Commited.
>
>Sugiro que vc leia os artigos sobre transações no site da FireBase,
>para se familiarizar com o assunto.
>
>[]s
>Cantu (Membro do TeamFB - FireBase)
>http://www.warmboot.com.br
>FireBase - http://www.FireBase.com.br
>
>AS> Bom dia.
>
>AS> Obrigado a todos pelas respostas.
>AS> Talvez eu esteja equivocado em querer usar esta característica então
>vou
>AS> explicar com mais detalhe porque achei que preciso.
>
>AS> Tenho uma tabela que registra os movimentos físicos de estoque e quando
>AS> executo um despacho físico dos itens de um pedido de vendas tenho que
>AS> garantir que nenhum outro usuário fará baixas nos mesmos itens até que
>a
>AS> transação termine.
>AS> Embora a transação seja muito rápida é possível que dois usuários
>iniciem
>AS> transações coincidentes com algum ou alguns itens em comum e como as
>AS> transações não "enxergam" entre si os registros inseridos por outra
>AS> transação é possível que o sistema permita baixa de um item que não
>esteja
>AS> no estoque, pois seu saldo é calculado sobre os registros de movimento,
>logo
>AS> o aplicativo pode não bloquear um saldo negativo porque simplesmente
>não
>AS> estaria negativo no momento da transação coincidente.
>AS> Concordo que a probabilidade de acontecer é muito pequena, mas existem,
>AS> então eu queria que ao iniciar uma transação dessas a tabela de
>movimentos
>AS> ficasse travada para outras transações até que este primeira
>terminasse,
>AS> garantindo 100% o cálculo do saldo no momento.
>
>AS> Se alguém puder sugerir uma outra forma agradeço muito.
>
>AS> Abraço
>
>AS> ----- Original Message -----
>AS> From: "Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br>
>AS> To: "FireBase" <lista em firebase.com.br>
>AS> Sent: Friday, July 06, 2007 7:58 AM
>AS> Subject: Re: [firebase-br] Snapshot Table Stability
>
>
>AS> Vc define as caracteristicas da transação no momento em que abre ela,
>AS> e não nas instruções sql (update, insert, etc) que vc vai rodar.
>
>AS> Cuidado pois esse tipo de isolamento pode gerar vários deadlocks,
>AS> dependendo do número de usuários simultâneos que vc tiver. Até hoje
>AS> nunca precisei usa-la nos meus sistemas.
>
>AS> []s
>AS> Cantu (Membro do TeamFB - FireBase)
>AS> http://www.warmboot.com.br
>AS> FireBase - http://www.FireBase.com.br
>
>AS>> Boa tarde pessoal.
>
>AS>> Li no livro "The Firebird Book" que podemos utilizar em alguns
>AS>> casos específicos uma característica de concorrência chamada "Snapshot
>AS> Table Stability".
>AS>> Esta característica será muito útil para uma situação específica
>AS>> na nossa aplicação, mas não estou conseguindo utilizar as palavras
>chave
>AS> :
>AS>> SNAPSHOT TABLE STABILITY, WAIT, WITH LOCK, [PROTECTED | SHARED] {READ
>|
>AS> WRITE}
>AS>> Já busquei no livro e na lista de discussão, mas não consegui
>AS>> encontrar exemplos de instruções SQL que se utilizem desta
>AS> característica.
>
>AS>> Obrigado
>AS>> ______________________________________________
>AS>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>AS>> Para editar sua configuração na lista, use o endereço
>AS>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>AS>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>AS> ______________________________________________
>AS> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>AS> Para editar sua configuração na lista, use o endereço
>AS> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>AS> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>Para editar sua configuração na lista, use o endereço
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>--
>No virus found in this incoming message.
>Checked by AVG Free Edition.
>Version: 7.5.476 / Virus Database: 269.10.0/886 - Release Date: 4/7/2007
>13:40
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>Para editar sua configuração na lista, use o endereço
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa
_________________________________________________________________
Inscreva-se no novo Windows Live Mail beta e seja um dos primeiros a testar
as novidades-grátis. Saiba mais:
http://www.ideas.live.com/programpage.aspx?versionId=5d21c51a-b161-4314-9b0e-4911fb2b2e6d
Mais detalhes sobre a lista de discussão lista