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

Gladiston Santana gladiston em vidy.com.br
Sex Abr 24 15:36:36 -03 2020


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.



Mais detalhes sobre a lista de discussão lista