Re: [firebase-br] Violação de chave primária

nosbori em yahoo.com.br nosbori em yahoo.com.br
Qua Fev 14 09:03:28 -03 2007


Bom dia Jorge,

Ajudou sim....

Com o Generator funcionou certinho. Coloquei dois programas gerando INSERT 
em loop e não deu erro em momento algum.

O problema que estava tendo e que relatei é que não utilizava Generator e 
sim tinha uma tabela (criada por mim) que se encarregava de armazenar todas 
as Sequences do meu banco.

Tentei modificar a forma de conexão do banco alterando o parâmetro do Lock 
resolution, mas não obtive sucesso.

Obrigado a todos pelos esclarecimentos...

Robson


----- Original Message ----- 
From: "Jorge Henrique" <jorgehenrique em americamoveis.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, February 14, 2007 7:56 AM
Subject: Re: [firebase-br] Violação de chave primária


Isso indica que o seu controle transacional não está muito correto. Se
vc não tem uma transação especifica para quando pegar o valor do
generator, provavelmente seria esse o seu problema. Faço dessa forma que
vc fez em emissão de notas fiscais, onde o numero da NF não pode ter
furos e tenho muitos usuarios emitindo nf's durante o dia, inclusive de
empresas diferentes (no mesmo banco de dados) e nunca tive problema
algum. O que faço é simples:

1-Inicio a transação
2-Pego o valor atual do generator
3-Adiciono +1
4-Commit

Detalhe: a transação tem q travar o registro no inicio da operação, isto
é, o primeiro a abrir a transação trava o registro e as outras estações
concorrentes devem esperar o término da mesma para prosseguirem. Assim
não tem como dar problema de PK's.

Espero ter ajudado,

[]'s

nosbori em yahoo.com.br escreveu:
> Bom dia pessoal,
>
> estou com um problema:
>
> Tenho um mesmo sistema instalado em diversas máquinas. Esse sistema em 
> determinada hora do dia recebe um volume muito grande de informações.
>
> Eu tenho uma tabela no meu banco de dados que armazena o Sequence de uma 
> derminada tabela, e o problema que estou tento é que quando várias 
> máquinas tentam salvar o registro na mesma tabela eles pegam o mesmo ID e 
> ocorre erro de violação de chave primária.
>
> Exemplo:
>
> Vamos imaginar que tenho as seguintes tabelas:
>
> TAB_APONTAMENTO
>
> TAB_SEQUENCE
>
> onde essa TAB_SEQUENCE controla os ID's corrente de todas as tabelas do 
> meu banco de dados....
>
> Quando eu vou inserir um registro na TAB_APONTAMENTO o sistema consulta o 
> ultimo ID na TAB_SEQUENCE e insere o registro.
>
> Problemas: Quando mais de um usuário tenta realizar um apontameto ao mesmo 
> tempo... o sistema que estão instalado em máquinas distintas, pegam o 
> mesmo ID e ocorre o erro...
>
> Detalhe: Cada vez que eu consulto o ultimo ID de uma tabela, já dou um 
> UPDATE com o valor que achei + 1....
>
> Se alguém puder me ajudar.... eu agradeço..
>
> Robson
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


		
_______________________________________________________ 
Yahoo! Mail - Sempre a melhor opção para você! 
Experimente já e veja as novidades. 
http://br.yahoo.com/mailbeta/tudonovo/
 






Mais detalhes sobre a lista de discussão lista