Вы находитесь на странице: 1из 4

Migrando um BD para o FB 2.

Data da ltima atualizao: 21/04/2008

O PROBLEMA

As verses anteriores ao Firebird 2.1 tem problemas relacionados com a extrao de


charsets e metadata:

Durante a criao/alterao de objetos, no havia a converso do cdigo textual da


metadata (procedures/triggers sources, descriptions, constraints/defaults texts, etc) do
charset utilizado no cliente para o charset do sistema (UNICODE_FSS), inserindo bytes
"no traduzidos" nas colunas de charset UNICODE_FSS.
Quando lendo BLOBs textuais, no havia traduo do charset definido no BLOB para o
charset do cliente.
Note que mesmo na verso 2.1, o item 1 acima poder ocorrer caso voc crie ou altere
objetos no banco de dados utilizando uma conexo com charset NONE ou
UNICODE_FSS, onde os dados contenham caracteres fora do padro UNICODE_FSS.

Caso seu banco de dados tenha objetos definidos com caracteres fora do padro ASCII,
voc deve repara-lo para que possa ser lido aps a migrao para o Firebird 2.1.

Abaixo esto descritos dois mtodos para corrigir o problema. Escolha o que for melhor
para o seu caso.

MTODO "A"

Para os passos a seguir, o banco de dados j deve estar na ODS 11.1 (significando
que, caso seu banco tenha sido criado em uma verso anterior do FB, voc deve fazer
um backup e restaura-lo no FB 2.1).

Antes de comear, faa uma cpia do seu banco de dados.

Para cada um dos passos descritos a seguir, aconselhvel que voc reconecte no
banco de dados.

Passo 1. Criando as procedures no banco de dados

isql database.fdb
SQL> input 'misc/upgrade/metadata/metadata_charset_create.sql';
Passo 2. Verificando o banco de dados

isql database.fdb
SQL> select * from rdb$check_metadata;
A procedure rdb$check_metadata vai retornar todos os objetos que foram afetados por
ela.

Caso no retorne um erro/exceo, significa que sua metadata est OK e voc pode ir
direto para o passo 4 (abaixo). Caso contrrio, o primeiro objeto com problemas o
ltimo listado antes de ocorrer a exceo.

Para corrigir a metadata, necessrio saber com qual charset o objeto foi criado. O
script de upgrade funcionar corretamente apenas se toda a metadata foi criada com o
mesmo charset.

Passo 3. Corrigindo a metadata

isql database.fdb

SQL> input 'misc/upgrade/metadata/metadata_charset_create.sql';


SQL> select * from rdb$fix_metadata('WIN1252'); -- troque WIN1252 pelo charset
apropriado
SQL> commit;
A procedure rdb$fix_metadata retornar os mesmos dados que a procedure
rdb$check_metadata, mas ir alterar o texto da metadata.

A procedure deve ser executada apenas uma vez! Depois disso, poder ser apagada.

Passo 4. Removendo as procedures de atualizao

isql database.fdb
SQL> input 'misc/upgrade/metadata/metadata_charset_drop.sql';
MTODO "B"

Este mtodo tem a vantagem de criar um banco de dados com estrutura 100% vlida,
visto que qualquer problema no cdigo de procedures, triggers, etc., como por exemplo
o uso de palavras que passaram a ser reservadas, acusar erros durante a execuo
do script, que dever ser corrigido a fim de deixar o banco de dados com uma metadata
perfeita.

Sempre trabalhe com uma cpia da base de dados original, para evitar qualquer tipo de
problema.
Antes de migrar para o FB 2.1, extraia o script de criao do banco de dados que ser
migrado.
Crie um novo banco de dados j no Firebird 2.1, utilizando o script gerado
anteriormente. Caso ocorram erros durante a execuo do script, corrija os problemas
reportados.
Atravs de uma ferramenta de PUMP (exemplo: IB DataPump), copie os dados da base
antiga para o novo banco de dados.
Autor: Carlos Henrique Cantu - Mtodo "A" traduzido e adaptado do arquivo

metadata_charset.txt que acompanha o FB 2.1

Вам также может понравиться