[firebase-br] o que é QLI rss

Jeudí Prando - GMail jeudiprando em gmail.com
Ter Out 10 19:45:33 -03 2006


o que eu achei como tem um tutorial bem completo sobre restauração, coloquei 
tudo

o arquivo help.fdb é um manual para QLI... rss

extraido de:
http://www.webmundi.net/forum/forum_posts.asp?TID=158&SID=e1afb7456c8cdz57959a132a35673378&PID=246#246

Um número grande de tipos de corrupções podem ser reparadas através dos 
utilitários gfix e gbak. No entanto, é possível que em alguns casos raros o 
arquivo de banco de dados esteja corrompido de tal maneira que seja 
impossível para esses utilitários restaura-lo. Nesses casos, medidas mais 
drásticas podem ser necessárias para colocar o BD on-line novamente. Se voce 
não conseguir recuperar seu BD, entre em contato conosco e nós veremos o que 
poderemos fazer para ajudar.

A causa mais freqüente de corrupção é a queda de energia no servidor de 
banco de dados. Cortar a energia quando uma aplicação está em processo de 
gravação no Banco de Dados pode resultar que dados incompletos ou 
corrompidos sejam gravados no arquivo de Banco de Dados. Em todos os casos, 
o usuário e o administrador de sistema deve tomar todos os cuidados 
necessários para que isso não aconteça.

O InterBase tem dois modos de escrita (escrita forçada), síncrono e 
assíncrono. Nas versões anteriores do IB, o modo de escrita padrão era 
síncrona.
gfix -write sync database.gdb
No IB 6.0, a escrita padrão é assíncrona :
gfix -write async database.gdb

A escrita síncrona também é conhecida como "escrita cuidadosa" e nela o 
Interbase irá gravar as páginas alteradas assim que a transação for 
commitada, e retorna-las ao BD na ordem correta (em se tratando do 
servidor). Esse tipo de escrita funciona bem em ambientes Linux ou Unix, mas 
causam alguns problemas no Windows e no NT. Esses sistemas ignoram as 
instruções de escrita do Interbase e, mesmo as páginas tendo sido commitadas 
e gravadas, elas somente serão realmente gravadas quando o sistema 
operacional achar que é melhor faze-lo, mesmo com a opção de escrita-forçada 
ligada.

Portanto, apesar da corrupção de arquivos ser rara, o Windows é o sistema 
mais suscetível à uma possível corrupção.

Geralmente a maioria dos usuários deixam a opção de escrita-forçada 
desligada devido ao ganho de performance que se pode obter deixando que o 
Sistema Operacional gerencie seu cache de dados automaticamente. Se voce 
está usando escrita assíncrona, tome muito cuidado com sua estratégia de 
backup, no caso do pior acontecer.

Nas versões anteriores do IB 6.0, o aplicativo Server Manager oferecia 
alguns recursos de validação de um BD, assim como o atual IBConsole, no 
entanto, eu recomendo o uso do utilitário GFIX para essa função devido ao 
seu maior número de opções e flexibilidade.

A corrupção de um BD que pode ser reparada geralmente poderá ser recuperada 
usando o gfix ou uma combinação do gfix e do gbak.

1. Defina as seguints variáveis para tornar o processo mais fácil pois voce 
não terá que digitar toda hora o usuário e a senha.
SET ISC_USER=SYSDBA
SET ISC_PASSWORD=masterkey

2. Sempre tenha certeza de estar trabalhando com uma cópia do BD e não o 
arquivo original. Use o sistema operacional para fazer uma cópia do arquivo. 
Voce deve ter acesso exclusivo ao BD para fazer isso.
copy employee.gdb database.gdb

3.Agora confira se o BD está corrompido. Voce precisa ter acesso exclusivo 
ao BD para fazer isso, mas como voce está trabalhando com uma cópia do BD 
original, isso não é problema.
gfix -v -full database.gdb

4. Se o comando anterior indicou que há um problema com o BD, agora nós 
devemos repara-lo.
gfix -mend -full -ignore database.gdb

5.O próximo passo é conferir se o BD foi reparado.
gfix -v -full database.gdb

6. Se o BD continua com erros, voce deve fazer um backup completo e 
restaura-lo. No seu estilo mais simples, a linha de comando do backup pode 
ser :
gbak -backup -v -ignore database.gdb database.gbk

7. No entanto, se o gbak falhar porque está tendo problemas com garbage 
collection, então use o seguinte comando :
gbak -backup -v -ignore -garbage database.gdb database.gbk

8. Se houver corrupção nas versões dos registros de uma transação em limbo, 
então voce deve incluir a opção -limbo :
gbak -backup -v -ignore -garbage -limbo database.gdb database.gbk

9. Agora crie um novo BD do backup:
gbak -create -v atlas.gbk atlas_new.gdb

10. Se houver problemas durante o restore, considere usar as seguintes 
opções.
-inactive, se houver problemas de índices, isso irá restaurar o BD mas não 
irá ativar nenhum índice, depois voce poderá ativar os índices manualmente 
um de cada vez.
-one_at_a_time, isso irá restaurar o BD uma tabela por vez, e commitar as 
tabelas restauradas, se houver um problema maior pelo menos voce terá uma 
parte dos dados.
Se tudo isso não funcionar, mas voce ainda puder acessar o banco de dados 
corrompido, considere usar o QLI para mover os dados e estruturas das 
tabelas do BD danificado para um novo.

1. Crie um banco de dados em branco.

2. Edite o seguinte (get_tables.sql) para apontar para o BD corrompido.
connect database.gdb
user 'sysdba' password 'masterkey;
select 'define relation tgt.',
rdb$relation_name, ' based on relation src.', rdb$relation_name, ';'
from rdb$relations
where rdb$relation_name not starting with 'RDB$';
commit;
select 'tgt.', rdb$relation_name,
' = src.', rdb$relation_name, ';'
from rdb$relations
where rdb$relation_name not starting with 'RDB$';

3. Edite o arquivo resultante para que ele se pareça com isso :
ready old.gdb as src;
ready new.gdb as tgt;
define relation tgt.COUNTRY based on relation src.COUNTRY;
define relation tgt.JOB based on relation src.JOB;
define relation tgt.DEPARTMENT based on relation src.DEPARTMENT;
define relation tgt.EMPLOYEE based on relation src.EMPLOYEE;
define relation tgt.PROJECT based on relation src.PROJECT;
define relation tgt.PHONE_LIST based on relation src.PHONE_LIST;
define relation tgt.EMPLOYEE_PROJECT based on relation src.EMPLOYEE_PROJECT;
define relation tgt.CUSTOMER based on relation src.CUSTOMER;
define relation tgt.SALES based on relation src.SALES;
define relation tgt.PROJ_DEPT_BUDGET based on relation src.PROJ_DEPT_BUDGET;
define relation tgt.SALARY_HISTORY based on relation src.SALARY_HISTORY;
tgt.COUNTRY = src.COUNTRY;
tgt.JOB = src.JOB;
tgt.DEPARTMENT = src.DEPARTMENT;
tgt.EMPLOYEE = src.EMPLOYEE;
tgt.PROJECT = src.PROJECT;
tgt.PHONE_LIST = src.PHONE_LIST;
tgt.EMPLOYEE_PROJECT = src.EMPLOYEE_PROJECT;
tgt.CUSTOMER = src.CUSTOMER;
tgt.SALES = src.SALES;
tgt.PROJ_DEPT_BUDGET = src.PROJ_DEPT_BUDGET;
tgt.SALARY_HISTORY = src.SALARY_HISTORY;

4. Agora instale a versão apropriada do QLI no diretório interbase\bin e 
rode o script QLI invocando o QLI e rodando o script move.sql. 





Mais detalhes sobre a lista de discussão lista