[firebase-br] Alterar tabelas do sistema no Firebird 3
Urias Gadelha
uriasgadelha em redesoft.com.br
Qui Abr 23 16:09:55 -03 2020
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! :)
--
Mais detalhes sobre a lista de discussão lista