[firebase-br] Snapshot Table Stability
Anticlei Scheid
cleischeid em yahoo.com.br
Sex Jul 6 12:33:45 -03 2007
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
Mais detalhes sobre a lista de discussão lista