Fórum Problemas de DeadLocks com Ado SQL Server - Como resolver ? #330953
10/10/2006
0
Estou com um problema com relacao a transacoes no Delphi 6 + ADO
Estou utilizando o start da transacao a partir do AdoConnection, atraves do BeginTrans.
Meu problema esta com relacao as deadlocks, ou seja, inicializo uma transacao e as tabelas envolvidas
nele ficam com acesso exclusivo para quem iniciar primeiro. E, qdo outro usuario tentar atraves da rede
iniciar o mesmo processo (ex: cadastro de notas fiscais), o AdoConnection retorna Time Out e naum é
possivel trabalhar 2 ao mesmo tempo.
Deu uma lida sobre o isotationLevel mas naum consegui nenhum resultado. Talvez eu esteja usando o nivel
errado ou de uso errado.
Por favor, se alguem poder me auxiliar sobre esse problema, fico mto agradecido.
Desde ja, mto obrigado
Rafael
Iluvatar
Curtir tópico
+ 0Posts
10/10/2006
Leorez
try
if not conCtb.InTransaction then
conCtb.BeginTrans;
qryGrava.Close;
qryGrava.SQL.Text := ´ Insert into TABELA (Campo1, Campo2) values (valor1 ,valor2) ´;
qryGrava.ExecSQL;
conCtb.CommitTrans;
except
conCtb.RollbackTrans
end;
Gostei + 0
10/10/2006
Iluvatar
o problema eh durante o tempo q a transacao esta aberta, independente da finalizacao.
someone ?
Gostei + 0
10/10/2006
Macario
Que processos voce efetua entre o start e o commit/rollback?
Veja o tempo que a transacao fica aberta, o ideal e que fique o menor tempo possivel, assim minimizando a ocorrencia de DeadLocks.
:roll:
Gostei + 0
10/10/2006
Iluvatar
a transacao eh iniciada qdo o usuario deseja lancar ou editar uma nota.
e qdo ocorre o begintrans, o deadlock acontece qdo alguem mais quer realizar uma outra NF.
alguma ideia ?
Gostei + 0
10/10/2006
Marcio.theis
Gostei + 0
10/10/2006
Macario
Ola.
Se voce inicia a transacao do momento da edicao da nota pelo usuario, ai e que se encontra o problema. Esta edicao pode demorar segundos, minutos ou horas. O ideal e que voce start a transacao no momento de efetivar a nota.
Acho que outros colegas tem a mesma opiniao
Gostei + 0
10/10/2006
Iluvatar
NF
NFItens
Detalhamentos
Duplicatas
sendo a ligacao correta para referencial de integridade.
ou seja, naum adianta eu incluir no NFItens caso a cabecalho naum esteja gravado.
a transacao me revolve as pendencias de naum necessitar no final, caso o usuario cancele ou ocorra alguma problema, de ficar lixo na base. E nao precisa ter q ficar monitorando para apagar dados cancelados. A transacao q estou usando, tem esse objetivo.
caso alguem possa dar uma luz ?
obrigado
Gostei + 0
10/10/2006
Macario
Quais componentes de acesso voce utiliza ADO +???
Voce faz uso de ClientDataSet?
Gostei + 0
10/10/2006
Iluvatar
sem o clientDataSet.
Gostei + 0
10/10/2006
Iluvatar
vou realizar mais testes e colocar nos clientes...se tudo funcionar, deixo registrado para as demais pessoas q tiverem esse problema.
obrigado a ajuda de todos
Gostei + 0
12/10/2006
Bon Jovi
E caso possa fazer leitura suja em toda a aplicação, execute SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED. Assim não será preciso colocar NOLOCK em todas as tabelas e terá o mesmo efeito.
Só não aconselho essa prática!
Gostei + 0
12/10/2006
Bon Jovi
E caso possa fazer leitura suja em toda a aplicação, execute SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED. Assim não será preciso colocar NOLOCK em todas as tabelas e terá o mesmo efeito.
Só não aconselho essa prática![/quote:8524e03236]
Complementando:
A linha do SET TRANSACTION ... pode ser executada uma única vez no evento AfterConnection do Connection.
Leitura decente com SQL Server 2005:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)