[firebase-br] Por favor uma ajuda em Reset Automático de Generator

Antonio Carlos a.lima.silva em terra.com.br
Qui Jan 24 18:27:48 -03 2019


Pessoal tenho a seguinte situação, umas 100 maquinas que geram pedidos durante o horário comercial em um banco Firebird 2.5 Superclassic rodando em Linux.

Esses pedidos recebem um incremento numérico que faz parte da PK da tabela de um Generator.

Esse incremento numérico tem que ficar limitado a 9.999.999 e quando chegar a esse valor o Generator ser reiniciado.

Como o Generator não tem um evento After ou Before não tenho como automatizar ali.

A aplicação desktop recebe o numero ao fazer a gravação do insert nessa tabela ou seja isso ocorre na aplicação e não diretamente no banco através de um 'SELECT GEN_ID(GEN_OPE_EC,1) AS VALOR FROM RDB$DATABASE'

Verifiquei que mesmo realizando explicitamente um start transaction com um commit ou rollback o generatror é incrementado.

Dai que pensei em algo que dá certo em laboratório mas não tenho como testar havendo muitas requisições concorrentes.

Criei uma Store Procedure que é chamada dentro de um contexto de transação explicita, e ao ser chamada o select no generator e o retorno é retornado a aplicação.

Na mesma Stored Procedure o valor retornado é testado e se for o valor máximo, através de uma transação autônoma o generator é reiniciado.

Isso em ambiente de teste funciona, mas por absoluta inexperiência não sei se em ambiente real vai funcionar.

Esse sistema antes realizada o incremento atraves de uma consulta ao campo de uma tabela e através de triggers nesse campo gerava esse controle, entretanto AS vezes ocorria violação da KEY e ao mudar para Generator deixou de ocorrer.

O que os colegas poderiam me orientar por favor.

Obrigado

Antonio Carlos.










Mais detalhes sobre a lista de discussão lista