[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