[firebase-br] Controle Transacional

Eduardo Jedliczka edujed em gmail.com
Seg Ago 24 10:13:19 -03 2009


Marco, sua dúvida é comum...

Quando alguém estuda Oracle ou SQL Server, é sempre frizado.... "SELECT
NÃO ABRE TRANSAÇÃO".... "TRANSAÇÃO É PARA ALTERAR DADOS"...

mas isto não é verdade para todos os bancos de dados... NO FIREIBIRD
(exceto os generators) TUDO USA TRANSAÇÃO, mesmo selects.

As informações do Douglas Tosi estão corretas... E para se conseguir a
melhor performance, tem-se que conhecer não só a teoria do funcionamento
do banco, mas também os conceitos adotados pelo componente de acesso....
Exemplo:

O banco exige um commit no select, mas o componente fecha o dataset após
o commit... 

solução fácil (para não dizer preguiçosa): deixa a transação aberta, e o
banco que se exploda!

jeito correto: veja se o componente tem uma transação "read-only /
read-commited / auto-commit" se tiver, faça todos os selects da
aplicação por esta transação, e use "outras" transações para alterar os
dados no banco.

Se o componente não implementar este recurso, o uso do CDS (delphi) só
irá agravar o problema. Mas dá para usar um conceito semelhante,
copiando o select para uma MemoryTable e commitar o select.

Abraço

Eduardo

Em Sex, 2009-08-21 às 16:59 -0300, Marco Antonio Abreu escreveu:

> Desculpem,
> 
> mas pelo que sei uma transação só é necessária para agrupar um conjunto de
> alterações no BD. Assim, se uma delas falhar podemos desfazer todas sem
> comprometer a integridade do BD. Existe algum motivo por que devemos
> utilizar uma transação para fazer selects?
> 
> []'s,
> Marco
> 
> 
> 2009/8/21 Douglas Tosi <douglasht em gmail.com>
> 
> > 2009/8/21 Marco Antonio Abreu <mabreu.ti em gmail.com>:
> > > Se eu faço um select no banco o FB abre uma transação para ele, mesmo não
> > > sendo um select FOR UPDATE? É isso mesmo?
> >
> > É isso mesmo. *Tudo* deve acontecer dentro do contexto de uma
> > transação. Mesmo um select.
> >
> > > Em caso positivo, isso significa que preciso fazer um commit em uma
> > conexao
> > > onde só faço selects? E para cada select? Um rollback não seria mais
> > rápido?
> >
> > Se não houve alteração, tanto faz commit ou rollback.
> >
> > hth,
> > --
> > Douglas Tosi
> > www.sinatica.com
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> 
> 
> 



Mais detalhes sobre a lista de discussão lista