[firebase-br] RES: Erro de Deadlock

Wesley Oliveira wesley em rgsystem.com.br
Seg Maio 26 12:29:41 -03 2014


Obrigado pela dica Jéter!

Um colega tinha sugerido a mesma coisa e já até fiz a alteração. Realmente
esses problemas se encerraram.
É uma solução muito melhor do que a que estávamos utilizando...

Att.

Wesley Oliveira
Programador de Sistemas de Informação
RG System Informática
Fone:      +55 (27) 3727-1127
Celular:    +55 (27) 99606-0038

-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Jéter Rabelo -
GMail
Enviada em: segunda-feira, 26 de maio de 2014 10:52
Para: FireBase
Assunto: Re: [firebase-br] Erro de Deadlock

Bom dia.

Para você não ter problemas com chaves primárias utilize um
generator/sequence. Pois ao incrementar um generator, esse processo é feito
independente de transação.

O problema de deadlock é porque existe uma transação aberta tentando gravar
um registro na tabela, e outra transação tenta gravar o mesmo registro.

Caso você não queira utilizar Generator/Sequence, reveja os commit's da
gravação da sua tabela.

Se você fizer: StartTransaction/Commit a cada incremente do registro, os
índices de dealock's serão bastante reduzidos, talvez até eliminados.

Atenciosamente.
Jeter-Jerasoft
______________________
Jéter Rabelo Ferreira
<http://www.jerasoft.com.br>

http://www.jerasoft.com.br
Skype: jeter.rabelo

Em 26/05/2014 10:43, Wesley Oliveira escreveu:
> Olá pessoal!
>
>   
>
> Estou com uma situação um tanto quanto desagradável.
>
>   
>
> Tenho uma função chamada PRO_RETORNA_ID que me traz o próximo ID 
> utilizável de uma tabela passada via parâmetro e atualiza uma tabela 
> “contadora” com esses registros.
>
> O problema é o seguinte: quando eu chamo uma função para encerrar o 
> ano letivo da escola em dois computadores diferentes (são dois anos 
> diferentes também), o sistema passa por todos os alunos do ano letivo 
> gerando o histórico.
>
> Para salvar o histórico no banco, é chamada a função PRO_RETORNA_ID 
> uma única vez para cada aluno. Eu estava com erro de deadlock antes e, 
> manipulando a maneira como a função é chamada, consegui parar com esse 
> problema, entretanto, comecei a receber um erro de violação de chave 
> primária.
>
>   
>
> Para tentar resolver o problema, fiz uma trigger no BeforeInsert da 
> tabela de Históricos que é a seguinte:
>
>   
>
> DECLARE VARIABLE TEM INTEGER;
>
> BEGIN
>
> SELECT COUNT(*) FROM TSI_HISTORICO WHERE CSI_CODHIS = NEW.CSI_CODHIS 
> INTO :TEM;
>
>   
>
> IF (TEM > 0) THEN
>
> BEGIN
>
> NEW.CSI_CODHIS = (SELECT RESULTADO FROM 
> PRO_RETORNA_ID('TSI_HISTORICO', 'CSI_CODHIS'));
>
> END
>
> END
>
>   
>
> Porém, agora eu recebo o erro de Deadlock transaction novamente... Já 
> procurei várias maneiras de fazer o tratamento das transações tanto na 
> procedore quanto na trigger mas nada resolveu. Inclusive encontrei uma
> página que mostra uma sentença assim:        IN AUTONOMOUS TRANSACTION DO
> (...)
>
> Mas também não funcionou...
>
>   
>
> Alguém tem alguma idéia de como resolver essa questão?
>
>   
>
> Att.
>
> Wesley Oliveira
> Programador de Sistemas de Informação
>
> RG System Informática
> Fone:      +55 (27) 3727-1127
> Celular:    +55 (27) 99606-0038
>
>
>
>   
>
>   
>
> ______________________________________________
> 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
>


______________________________________________
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