[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