[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