[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