[firebase-br] RES: RES: RES: RES: Rotina de Backup/Restore

Eduardo Bahiense eduardo em icontroller.com.br
Qui Jan 21 16:57:18 -03 2010


Olá

Vamos tentar esclarecer as coisas:
1. O backup pode ser realizado com o banco rodando. O FB não exige 
acesso exclusivo para executar o GBAK.
2. O que você quer, na verdade, é uma maneira de impedir que o FB acesse 
o seu banco para você poder substituí-lo por uma cópia proveniente da 
restauração do backup, ainda que você esteja fazendo isso na mesma 
operação (Gbak - REP)
3. Nenhum SGBD existente conseguirá sobreescrever um arquivo em uso.
4. Para contornar a limitação em [3.] você terá que conseguir que todos 
os clientes conectados se desconectem e impedir que eles reconectaem até 
que o processo de restauração esteja concluído.
5. Não vejo como evitar a tentativa de conexão ao banco a não ser por 
algum semáforo criado pela aplicação onde, antes de conectar, a 
aplicação verifique se o processo de restore não está em andamento. 
Observe que, para esse fim, o próprio FB não conseguirá conectar 
enquanto o banco está sendo restaurado, retornando um erro, e isso, se 
tratado pela aplicação, será suficiente para avisar ao usuário que não 
foi possível conectar.
6. O "X" da questão, então, está em se conseguir desconectar todos os 
clientes, obter acesso exclusivo, completar o processo de backup e 
iniciar sua retauração.
7. Não pesquisei, mas me parece que você deve:
   a. Colocar o banco em SHUTDOWN - Isso desconectará todos os clientes, 
mas SHUTDOWN é um pedido ao SGBD que nem sempre pode ser atendido e sua 
aplicação terá que ceckar isso.
   b. Iniciar o processo de backup
   c. Restaurar
   d. Retirar o SHUTDOWN
8. Uma outra opção seria:
   a. Parar o Serviço FB
   b. Renomear o banco
   c. Reiniciar o Serviço (quem tentar conectar não encontrará o 
arquivo, pois foi renomeado)
   d. Fazer bkp/restore
   e. RE-Renomear

Não vou nem questionar como é o processo com o ACCESS, mas qualquer SGBD 
que você for lidar terá que passar por algo muito parecido ao que listei 
acima.

Eduardo



Olá Felix,
É que o sistema, desenvolvido aqui na empresa, tem uma opção de fazer 
backup e restore dentro do próprio software. Com Access, isso funcionava 
perfeitamente, bastava eu desconectar da base antes de começar os 
procedimentos. Mas com Firebird, para poder fazer o restore, por 
exemplo, eu tenho que fechar toda minha aplicação (não basta apenas 
fechar a conexão do banco). E se eu tiver que fechar a aplicação para 
fazer um restore, não tem lógica eu manter a opção de fazer restore 
dentro da aplicação. Acho que não tem como fugir disso, vou ter mesmo 
que fazer uma aplicação separada só para backup/restore  ;)
Vlw,
qqr outra dica, manda pra lista.






Mais detalhes sobre a lista de discussão lista