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

Mario brujeria em task.com.br
Qua Fev 14 08:22:35 -03 2007


Ola,

sinceramente não estou entendendo todo este alvoroço.

	1. Voce monta seu novo registro usando GEN_ID(GENERATOR,1)
	2. As referencias a este numero use GEN_ID(GENERATOR,0).
	3. Com todas as SQL juntas execute um Commit/Rollback.

Pronto, não precisa preocupar com nada.
Ainda acho q travar registro deve ser para outros casos, e nao devido ao
generator pois este já tem a função GEN_ID para fazer o controle.

Valeu
Mario H. 


Em Qua, 2007-02-14 às 07:56 -0300, Jorge Henrique escreveu: 
> 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





Mais detalhes sobre a lista de discussão lista