Como fazer o “drop” do generator

Não existe nenhum comando DROP GENERATOR… no InterBase/Firebird. A única possibilidade é eliminar a definição do generator da tabela de sistema:

   DELETE FROM RDB$GENERATORS
WHERE RDB$GENERATOR_NAME=’MYGEN’;

Mas este método tem algumas DESVANTAGENS:

#InterBase não verifica as dependências, o que significa que permite eliminar o Generator mesmo este estando a ser utilizado por um Trigger ou Stored Procedure.

Felizmente, basta voltar a criar o generator em falta (e definir o valor inicial para remediar o problema).
#Cada Generator consiste de duas partes:
– registo na tabela RDB$GENERATORS
– a variavel/contador em si, que é armazenado numa página especial da Base de Dados

o Campo RDB$GENERATOR_ID na Tabela RDB$GENERATORS é de factoo indice para o array de generatorsna pagina de generators.

Quando eliminamos um generator da tabela de sistema, o espaço que lhe é atribuido na página de generators(e o generator_ID) continuam não usados.

O que significa que o recem criado generator terá sempre um novo valor para rdb$generator_id em vez de reutilizar o existente.

Resumindo, eliminar o Generator vale a pena apenas se pretendermos fazer o Backup/restore da base de dado, ou se pretendermos acabar com o generator e não voltar a criar um novo.

No caso precisar de um Generator com um nome diferente , basta renomear um antigo, não utilizado:

   UPDATE RDB$GENERATORS
SET RDB$GENERATOR_NAME=’NEW_GEN’
WHERE RDB$GENERATOR_NAME=’OLD_GEN’;

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: