[firebase-br] Alterar tabelas do sistema no Firebird 3

Urias Gadelha uriasgadelha em redesoft.com.br
Sex Abr 24 15:56:51 -03 2020


Muito obrigado pela atenção.

Como era muito urgente ontem, resolvi fazendo execute blocks que criavam
colunas temporarias, passavam os dados e apagavam a coluna antiga e depois
renomeavam.

Valeu pela ajuda!

Em sex., 24 de abr. de 2020 às 15:39, Gladiston Santana <
gladiston em vidy.com.br> escreveu:

> Colega, alterar as tabelas de sistemas não garantiriam o comportamento que
> você deseja porque há um histórico de dados envolvidos.
> Pessoas que faziam isso no FB2, mais tarde descobriram que teriam de lidar
> com informações que conflitavam entre os dados e o que dizia a DDL e tinham
> problemas para restaurar a base de dados, sua situação.
> Por isso o FB3 não deixa mais essas tabelas de sistema abertas para o
> usuário modificar se não for por comando ALTER.
> Minha sugestão, drop a tabela envolvida e recrie com a estrutura correta.
> Depois use o pump para transferir os dados sem precisar recriar as tabelas,
> mapeie os nomes de campos e/ou convertar se necessário.
> É um baita trampo. A outra forma é exportar para script SQL os dados
> originais e recompo-los numa estrutura de DB correta. IbExpert faz isso, se
> houver BLOBs, só na versão paga.
>
> inte+
>
> Em qui., 23 de abr. de 2020 às 16:13, Urias Gadelha <
> uriasgadelha em redesoft.com.br> escreveu:
>
> > Pessoal, vi que no firebird 3 as tabelas RDB$ são READ ONLY.
> >
> > Eu fiz a recuperação de um banco que era FB2.5 porém, ao criar os
> metadados
> > do banco novo (FB 3.0), ele criou os BLOBS que era SUB_TYPE 1 como
> SUB_TYPE
> > 0.
> >
> > Já fiz o pump dos dados, e agora preciso alterar o SUB_TYPE dos BLOBS de
> 0
> > para 1.
> >
> > No FB2.5 eu fiz isso através do update a seguir:
> >
> > UPDATE RDB$FIELDS SET
> > RDB$FIELD_SUB_TYPE = 2
> > WHERE RDB$FIELD_NAME in (
> > select t1.RDB$FIELD_NAME FROM
> > RDB$FIELDS t1
> > join RDB$RELATION_FIELDS t2
> > on t1.RDB$FIELD_NAME = t2.RDB$FIELD_SOURCE
> > where t2.RDB$RELATION_NAME not CONTAINING '$'
> > and t1.RDB$FIELD_TYPE = 261)
> >
> > e deu certo, Porém, no firebird 3.0 não consigo dar updates nas tabelas
> > RDB$.
> >
> > Já tentei usar o seguinte comando:
> >
> > alter table NOME_TABELA alter COLUMN NOME_CAMPO type BLOB sub_type 1
> >
> > Porém no FB3 ele diz que não pode alterar o sub_type assim.
> >
> >
> > Já tentei procurar no RELEASE NOTE e achei o seguinte:
> >
> >   User Privileges for Metadata Changes
> >
> > Dmitry Yemanov with Roman Simakov
> >
> > In Firebird 3, the system tables are read-only. This SQL syntax provides
> > the means to assign metadata write privileges to specified users or roles
> > for specified objects. See Tracker item CORE-735.
> >
> > Note Some people have been applying the nickname “DDL privileges” to this
> > feature. Don't confuse it with “DDL triggers”! A more useful nickname
> would
> > be “Metadata privileges”. Syntax Patterns Granting metadata privileges:
> >
> >  GRANT CREATE TO [USER | ROLE] | [WITH GRANT OPTION];
> >  GRANT ALTER ANY TO [USER | ROLE] | [WITH GRANT OPTION];
> >  GRANT DROP ANY TO [USER | ROLE] | [WITH GRANT OPTION];
> >
> > Executei o comando: GRANT ALTER ANY TABLE TO SYSDBA;
> >
> > porém ainda não tive sucesso...
> >
> >
> > Além de ter que criar uma nova coluna com um nome temporário com o tipo
> > certo, fazer um update e depois deletar a coluna antiga e renomear a nova
> > para o nome da antiga.
> >
> >
> > Observação: Fica inviável restaurar o banco antigo novamente, pois já
> está
> > no cliente e já contem dados atualizados.
> >
> > Alguém sabe o que posso fazer?
> >
> > É possível fazer um downgrade do FB3.0 para o 2.5 apenas com backup
> > restore, se eu não utilizei nada do FB3 no banco ainda?
> >
> > Desde já agradeço a ajuda de vocês! :)
> > --
> > ______________________________________________
> > 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://www.firebase.com.br/pesquisa_lista.html
> >
>
>
> --
> A Vidy possui um Sistema de Gestão da Qualidade estruturado e com
> Certificação ISO 9001 há mais de 10 anos, mantendo seu foco na Qualidade e
> na Melhoria Continua.
>
> Em março de2018 migramos com sucesso para a nova versão da ISO 9001.
>
> Somos a única Empresa Brasileira de Engenharia de Laboratórios com
> certificação com o Escopo Completo; desde Projetos, Engenharia, Construção,
> Fabricação e Instalação de Laboratórios.
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>


--



Mais detalhes sobre a lista de discussão lista