[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