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

Mario brujeria em task.com.br
Qua Fev 14 08:53:55 -03 2007


Bem lembrado meu amigo, sequenciais q DEVEM estar completos.

Isso é quase uma utopia =) 
Brincadeira, neste caso quando for usar o GEN_ID você deve travar TODA a
tabela, e nao o registro. certo?

Pq se outro usuário ao mesmo tempo fizer a requisição no mesmo GENERATOR
o numero poderá avançar mais 1 e será inviável voltar.

Se realmente for isso não é um pouco problemático segurar toda a
operação de INSERT em uma tabela quanto outros 20 usuários esperam?

Valeu
Mario H.

Em Qua, 2007-02-14 às 08:43 -0300, Sandro escreveu:
> O problema, é que tem que ter certeza que depois de usar a funcao
> gen_id(generator,1) vc naum vai voltar atraz na inclusão, pois o gen_id fica
> fora do contexto transacional. Ou seja.. se der um rollbacku e generator
> naum retornar ao valor antigo.  Cuidados entaum devem sser tomados para naum
> dar furo na sequencia.
> 
> Sandro Rebelo    2º  Oficio de Protesto de Itajai - SC
> ----- Original Message ----- 
> From: <nosbori em yahoo.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, February 14, 2007 8:28 AM
> Subject: Re: [firebase-br] Violação de chaveprimária
> 
> 
> Pessoal,
> 
> Só pra finalizar o alvoroço... eu estava com problemas porque eu não
> utilizava o Generator e nem tinha conhecimento sobre o mesmo...
> 
> Ele resolveu meu problema...
> 
> Agradeço a todos que me ajudaram..
> 
> Obrigado
> 
> Robson
> 
> ----- Original Message ----- 
> From: "Mario" <brujeria em task.com.br>
> To: <jorgehenrique em americamoveis.com>; "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, February 14, 2007 7:22 AM
> Subject: Re: [firebase-br] Violação de chaveprimária
> 
> 
> 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
> 
> 
> ______________________________________________
> 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/
> 
> 
> 
> 
> ______________________________________________
> 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/
> 
> 
> ______________________________________________
> 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