[firebase-br] gen_id retornando valor antigo ao vigente
Gladiston Santana
gladiston em vidy.com.br
Seg Out 13 09:45:05 -03 2014
Não dá para fazer tudo na procedure direto?
Uma trigger apenas para acertar as sequencias me parece tão banal.
Joga o V_IDREQUISICAO =GEN_ID(REQUISICAO_GEN,1) para antes do insert.
A proposito se você faz backup/restore todo o dia, sua base não está
corrompida.
Porém cada vez que você faz isso em cima da produção tá matando as
estatisticas conseguidas em apenas 1 dia de uso, o que tornaria seu banco
de dados menos eficiente, como se realizasse um 'reset' diário. A tempo de
uso de sua base de dados, gera estatisticas que calculam o custo/beneficio
de certas operações que podem torná-lo mais eficiente a cada dia.
[]´s
Em 10 de outubro de 2014 17:49, Gugui <suporte em emar.com.br> escreveu:
> Olá, eu faço um backup e restore todo dia a noite no banco, se tivesse
> corrompido ele normalmente abortaria o restore ou não necessariamente ?
>
> a minha procedure:
>
> SET TERM ^ ;
> ALTER PROCEDURE IUD_REQUISICAO (
> IDREQUISICAO integer,
> IDMATERIAL integer,
> IDSTATUS integer,
> IDUSUARIO_SOLICITANTE integer,
> DESCRICAO_MATERIAL varchar(120),
> QTDE DMNMOED1 DEFAULT 0,
> UNIDADE varchar(10),
> PRAZO_REQUISICAO date,
> OBSERVACAO blob sub_type 1,
> IDUP_1 char(1),
> IDUP_2 char(1),
> IDUP_3 char(1),
> IDUP_4 char(1),
> IDUP_5 char(1),
> IDUP_6 char(1),
> IDUP_7 char(1),
> OPC char(1),
> MS char(1),
> SOLICITANTE varchar(20) )
> RETURNS (
> V_IDREQUISICAO integer )
> AS
> BEGIN
> V_IDREQUISICAO = 0;
> IF(OPC = 'D') then
> UPDATE REQUISICAO SET EXCLUIDO = 'T' WHERE IDREQUISICAO =
> :IDREQUISICAO;
>
> IF(OPC = 'U') then
> begin
> UPDATE REQUISICAO a
> SET
> a.IDMATERIAL = :IDMATERIAL,
> a.IDUSUARIO_SOLICITANTE = :IDUSUARIO_SOLICITANTE,
> a.DH = 'now',
> a.DESCRICAO_MATERIAL = :DESCRICAO_MATERIAL,
> a.QTDE = :QTDE,
> a.UNIDADE = :UNIDADE,
> a.PRAZO_REQUISICAO = :PRAZO_REQUISICAO,
> a.OBSERVACAO = :OBSERVACAO,
> a.IDUP_1 = :IDUP_1,
> a.IDUP_2 = :IDUP_2,
> a.IDUP_3 = :IDUP_3,
> a.IDUP_5 = :IDUP_5,
> a.IDUP_6 = :IDUP_6,
> a.IDUP_7 = :IDUP_7,
> A.SOLICITANTE = :SOLICITANTE,
> A.IDSTATUS = :IDSTATUS,
> a.UPDATED_AT = 'now'
> WHERE
> a.IDREQUISICAO = :IDREQUISICAO;
> end
>
> IF(OPC = 'I') then
> BEGIN
> INSERT INTO REQUISICAO (IDMATERIAL, IDSTATUS,
> IDUSUARIO_SOLICITANTE, DH, DESCRICAO_MATERIAL, QTDE, UNIDADE,
> PRAZO_REQUISICAO,
> OBSERVACAO, IDUP_1, IDUP_2, IDUP_3, IDUP_5, IDUP_6, IDUP_7, MS,
> SOLICITANTE)
> VALUES (
> :IDMATERIAL,
> :IDSTATUS,
> :IDUSUARIO_SOLICITANTE,
> 'NOW',
> :DESCRICAO_MATERIAL,
> :QTDE,
> :UNIDADE,
> :PRAZO_REQUISICAO,
> :OBSERVACAO,
> :IDUP_1,
> :IDUP_2,
> :IDUP_3,
> :IDUP_5,
> :IDUP_6,
> :IDUP_7,
> :MS,
> :SOLICITANTE
> );
> V_IDREQUISICAO = gen_id(REQUISICAO_GEN,0);
> END
>
> SUSPEND;
>
> END^
> SET TERM ; ^
>
> a trigger:
>
> SET TERM ^ ;
> ALTER TRIGGER INC_REQUISICAO ACTIVE
> BEFORE INSERT POSITION 0
> AS
> BEGIN
> NEW.IDREQUISICAO = GEN_ID(REQUISICAO_GEN,1);
> END^
> SET TERM ; ^
>
>
>
>
>
>
> On 10-10-2014 17:20, Carlos H. Cantu wrote:
>
>> Ou tem alguma falha de lógica no seu sistema (procedures, etc) que
>> você ainda não identificou, ou seu banco pode estar corrompido,
>> afinal, generators ficam fora do contexto transacional, portanto,
>> nunca repetem o valor (a não ser que vc volte o valor do generator
>> manualmente).
>>
>> Não acredito que o problema esteja relacionado a um usuário
>> especificamente, mas talvez possa estar relacionado ao que esse
>> usuário específico faz de diferente dos outros.
>>
>> []s
>> Carlos H. Cantu
>> www.FireBase.com.br - www.firebirdnews.org
>> www.warmboot.com.br - blog.firebase.com.br
>>
>> G> olá,
>> G> tem um erro me deixando sem cabelo
>> G> tenho um sistema q faz +- 500 registros/mes (+ de 20 usuarios usam)
>> G> e acontece com 1 usuario somente (até agora), de vez em qdo, de ele
>> G> fazer um lançamento e
>> G> o banco retornar o registro na grid q ele inseriu, certinho, mas com um
>> G> id mais antigo (ja usado por outro lançamento) ao q esta em vigor no
>> G> sistema !
>> G> se ele insere outro registro ele continua na sequencia errada, trazendo
>> G> todos os campos q ele digitou certinho na grid sem erro !
>> G> se fecha o sistema e abre novamente, todos os lançamentos q ele fez
>> G> desaparece e ao fazer um lançamento retorna o id correto !
>> G> é como se ele trabalhasse em outro banco de dados mais antigo! e depois
>> G> voltasse para o banco em produção !
>>
>> G> ja troquei a maquina dele,
>> G> ja pinguei o dia inteiro a maquina, não perde nada !
>> G> não sei mais o q pode ser !
>>
>> G> vamos à parte técnica:
>>
>> G> Estação:
>> G> Linux CentOS 6.4 - 2.6.32-431.29.2.el6.x86_64
>>
>> G> Sistema feito em Lazarus 1.2.2 com Zeos 7.1
>>
>> G> Server:
>> G> Linux Debian GNU/Linux 7 (wheezy) 64
>> G> firebird2.5-superclassic 2.5.2~svn+54698.d amd64
>>
>> G> o sistema roda uma StoredProcedure q faz o insert e retorna o
>> G> GEN_ID(REQUISICAO_GEN,0) da tabela.
>> G> o campo chave primaria da tabela é incrementada atraves de uma trigger
>> G> com before insert
>> G> NEW.IDREQUISICAO = GEN_ID(REQUISICAO_GEN,1);
>>
>> G> alguma luz pra descobrir isso ?
>> G> grato qq ajuda
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> G> ______________________________________________
>> G> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> G> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> G> http://www.firebase.com.br/fb/artigo.php?id=1107
>> G> 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
>>
>>
>
> ______________________________________________
> 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
>
--
--
B em B@BU iB em M@B. B em MBBO MBBMMB em B@BZLr E@@@@i r@@@BU
vB em M@O E em B@Bu BBBM em 0 G em MMM@N8MBB em ZP5r B em B@k 8B@@O
OB em B@q 2 em BBBM B em B@BO BB em B@B,.:,7B em B@@L uB em B@, OB em B@.
,@@@B@ @BBB@, @BBB em 8 M em M@@@ PB em B@B @@@BN iB em B@L
U em B@B2 LB em B@X B em MBBO MBBM em B i em BBB@. 7 em B@Bi B em B@E
B@@@BiM em M@B. @BBM em G M em MMB@ v@@M em B, G em B@Z v em B@B.
7B em B@O em B@B5 B em B@B8 BBBM em B Z@@@B@ iB@@@2 em B@Br
NB em M@B em B8 @B em B@8 M em B@B em i:i75 em B@B em r E@@B em B@Bq
. em B@@@B@: B em B@B@ @B@@@B em B@B@@@ME; .BB em MBB@
55.ANOS OMOGBS PBZGGOOMOO117, 7 em BBB@r
==============================================r@@@@F=====
Gladiston Santana 8 em B@B,
Supervisor de TI G em B@B7
Tel.:+551147873122 R:228 :@B em B0
Grupo VIDY - SGQ ISO9001 - 55 ANOS @B em B@.
Visite nosso site: www·vidy·com·br BB@@@u
Visite também : www·expolabor·com·br GB em B@N
Mais detalhes sobre a lista de discussão lista