[firebase-br] Erro de Deadlock

Jéter Rabelo - GMail jeter.rabelo em gmail.com
Seg Maio 26 10:51:44 -03 2014


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
>





Mais detalhes sobre a lista de discussão lista