É Aconselhavél usar timer para verificar Transação da Rede?

13/03/2006

como o título diz...

pensei em usar esse código em um timer com intervalo de 10 segundos:
if Not Transaction.InTransaction then
 Transaction.StartTransaction;
  Try
   if Transaction.InTransaction then
    Transaction.CommitRetaining
     Except
      if Transaction.InTransaction then
       Transaction.RollbackRetaining;
        end;


[b:659cbb3f41]Detalhe:[/b:659cbb3f41]
passei a usar esse código depois que minha aplicação ficava o tempo todo, dando a mensagem:
lock conflict on no wait transaction
deadlock
update conflicts with concurrent update

pode ser usado ou geraria algum problema futuro na minha aplicação?


Paullsoftware

Respostas

13/03/2006

Adriano Santos

como o título diz... pensei em usar esse código em um timer com intervalo de 10 segundos:
if Not Transaction.InTransaction then
 Transaction.StartTransaction;
  Try
   if Transaction.InTransaction then
    Transaction.CommitRetaining
     Except
      if Transaction.InTransaction then
       Transaction.RollbackRetaining;
        end;
[b:e3618a28bc]Detalhe:[/b:e3618a28bc] passei a usar esse código depois que minha aplicação ficava o tempo todo, dando a mensagem:
lock conflict on no wait transaction
deadlock
update conflicts with concurrent update
pode ser usado ou geraria algum problema futuro na minha aplicação?


[b:e3618a28bc]PallSofware[/b:e3618a28bc], eu particularmente não aconselho. As Transações só devem, ou palavra certa seria ´necessitam´, serem usadas no momento da gravação/edição, etc de registros no seu Banco de Dados. Ora, se nenhum registro sendo editado porque ficar ´incomodando´ o banco com a requisição de transação?

Eu vejo por esta ótica, não sei o que poderia causar de problemas se a aplicação ficasse de tempo-em-tempo dando Commit, teria que fazer alguns testes, mas sei que não é necessário isso.

Talvez algum colega se pronuncie com mais detalhes.


Responder Citar

13/03/2006

Aroldo Zanela

Colega,

Isto viola um conceito básico de atomicidade de transações. (http://www.inf.puc-rio.br/~casanova/LivroCasanova/ncap6.pdf)

A noção de transação é introduzida para forçar o sistema a executar uma seqüência de ações elementares como se fosse uma unidade atômica, sem interferência externa. Na sua forma mais simples, uma transação contém apenas um comando da LMD. Exige-se do usuário que codifique as transações de tal forma que quando executadas sozinhas: T1. sempre terminem; T2. preservem a consistência do banco de dados. Exige-se do SGBD, por sua vez, que a cada invocação de uma transação T: S1. a transação T seja executada por completo; S2. a execução da transação T se dê sem interferência de outras transações que porventura estejam sendo executadas concorrentemente.



Responder Citar