Array
(
)

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

Paullsoftware
   - 13 mar 2006

como o título diz...

pensei em usar esse código em um timer com intervalo de 10 segundos:
#Código

if Not Transaction.InTransaction then
Transaction.StartTransaction;
Try
if Transaction.InTransaction then
Transaction.CommitRetaining
Except
if Transaction.InTransaction then
Transaction.RollbackRetaining;
end;


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

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


Adriano Santos
   - 13 mar 2006


Citação:
como o título diz...

pensei em usar esse código em um timer com intervalo de 10 segundos:
#Código

if Not Transaction.InTransaction then
Transaction.StartTransaction;
Try
if Transaction.InTransaction then
Transaction.CommitRetaining
Except
if Transaction.InTransaction then
Transaction.RollbackRetaining;
end;


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

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

PallSofware, 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.


Aroldo Zanela
   - 13 mar 2006

Colega,

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


Citação:

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.