Muitas vezes usuários, programadores são pegos de surpresa com 
corrompimento de bases de dados do Firebird (problemas elétricos, falhas 
de hardware, etc.).
Após passar por alguns problemas em clientes, resolvi fazer um script 
para realizar um backup (manutenção) diário na base de dados do Firebird 
sob Linux.
Estou compartilhando com os amigos esta primeira versão.
Espero que seja de ajuda para alguém!
O script está colado logo abaixo, mas quem quiser pegar o arquivo 
prontinho criado no VIM e salvar no seu diretorio de root no linux, pode 
pegar no link que estou postando junto.

http://www.mandeibem.com.br/?cod=3120092315459357

Grato,

Rocha



*--* Inicio do Script *--*

-->> recorte aqui <<--

# !/bin/sh

# bkfb versao 1.0
#
# Script de Backup para Banco de Dados FIREBIRD
# Escrito por Genivaldo Rocha - [email protected]
# Sugestoes, criticas e elogios serao bem vindas pelo email.
#
# Este Script estah sob a GPL Licence (COPYLEFT);
# Em: http://www.gnu.org/copyleft/copyleft.pt-br.html
# ou: http://www.gnu.org/home.pt-br.html
# ou: http://www.gnu.org/philosophy/philosophy.html
#
#


#
#       *** CONSIDERACOES **
#
# 1 - Verifique a disponibilidade de espaco em disco para o diretorio
# onde serao criados os backups, pois este script - nesta versao "ainda"
# nao apaga backups de dias anteriores. Este recurso fica para as proximas
# versoes.
# 2 - Na medida do possivel todo comando e saidas (resultados) serao
# logados no arquivo $DIA-bkfb.log
# 3 - Para as proximas versoes aceito sugestoes e ja estou trabalhando
# nas seguintes melhorias:
# 3a) Remocao das copias(backups) de "n" dias atras;
# 3b) Envio do arquivo de LOG (compactado) por email para o administrador;
# 3c) Envio de relatorio de erro por email para o administrador;
# 3d) Possibilidade de quebrar o backup em varios arquivos *.fbk(*.gbk);
# 3f) Opcao de gravar o backup em fita DAT "/dev/st0", DVD/CD ou poderah
#     mandar os arquivos par um diretorio da rede;
# 3g) Enviar o backup por ftp para outro servidor remoto.
# 3h) ...;
# 3i) ...;
#
#
#


#
# Coloca mensagem no console avisando sobre o inicio mostrando
# data e hora... bom pra saber o tempo do backup.
echo ' '
echo -n 'Processo de backup iniciado em: ' && date +%d/%m/%Y' - as '%H:%M
echo 'Aguarde a mensagem de finalizacao... '
echo ' '
echo 'Nao interrompa este processo!'
echo ' '
echo ' '


#
# Definicao de variaveis
# Alterar as variaveis conforme as configuracoes
# do Firebird, da base de dados e da Distribuicao LINUX.
#
DIA=$(date +%Y%m%d)
GB='/opt/firebird/bin/gbak'
GF='/opt/firebird/bin/gfix'
US='sysdba'
PW='masterkey'
PH='/dados/banco'
DB='bd_provenco.fdb'
BK='/bkp'
LOG=$BK/$DIA'-bkfb.log'


#
# Inicio dos processos
#
echo '*****************************************************' >> $LOG
echo '*** Script de backup para Bases de Dados FIREBIRD ***' >> $LOG
echo '***                   Versao 1.0                  ***' >> $LOG
echo '***             www.tecnoredes.com.br             ***' >> $LOG
echo '***   Genivaldo Rocha - [email protected]   ***' >> $LOG
echo '***                      [email protected]   ***' >> $LOG
echo '*****************************************************' >> $LOG
echo ' ' >> $LOG
echo ' ' >> $LOG
echo '*** Iniciando Backup ***' >> $LOG
echo -n 'Data: ' >> $LOG && date +%d/%m/%Y-%H:%M:%S >> $LOG && echo ' ' 
 >> $LOG


#
# Cria diretorio diario do backup da base de dados
#
echo 'Criando diretorio para o backup' >> $LOG
mkdir $BK/$DIA
echo 'Diretorio criado :  ' >> $LOG
ls -la -ad $BK/$DIA >> $LOG
echo 'Diretorio criado com sucesso!' >> $LOG && echo ' ' >> $LOG

#
# Shutdown na Base de Dados
#
echo 'Efetuando shutdown na base de dados' >> $LOG
$GF -z >> $LOG 2>&1
$GF -shut -force 0 -user $US -password $PW $PH/$DB >> $LOG 2>&1
echo 'A Base de dados agora está OFFLINE...' >> $LOG && echo ' ' >> $LOG


#
# Copia a base de dados
#
echo 'Copiando a base de dados ' >> $LOG  && echo ' ' >> $LOG
cp $PH/$DB $BK/$DIA/$DIA-base.fdb
ls -la $BK/$DIA/$DIA-base.fdb >> $LOG && echo ' ' >> $LOG
echo 'Base de dados copiada com sucesso!' >> $LOG
echo 'Uma copia da base, por seguranca estah no diretorio'$BK/$DIA >> 
$LOG && echo ' ' >> $LOG


#
# Prepara a base de dados para o GBAK (backup)
#
#echo 'Preparando a base de dados para o GBAK' >> $LOG  && echo ' ' >> $LOG
echo 'Otimizando a base de dados...' >> $LOG
$GF -sweep -user $US -password $PW $PH/$DB >> $LOG 2>&1
echo 'Consertando erros, se existirem...' >> $LOG
$GF -mend -full -user $US -password $PW $PH/$DB >> $LOG 2>&1
echo 'Base de dados preparada para o backup' >> $LOG && echo ' ' >> $LOG


#
# Efetua o backup da base de dados
#
echo 'Iniciando backup da base de dados usando GBAK' >> $LOG
echo -n 'Hora inicial: ' >> $LOG && date +%H:%M >> $LOG
$GB -b -g -v -z -t -user $US -password $PW $PH/$DB 
$BK/$DIA/$DIA-backup.fbk >> $LOG 2>&1
echo 'Backup efetuado com sucesso!' >> $LOG
echo -n 'Hora final: ' >> $LOG && date +%H:%M >> $LOG && echo ' ' >> $LOG


#
# Compacta a copia da base e o backup da base
#
echo 'Compactando a copia da base de dados...' >> $LOG  && echo ' ' >> $LOG
tar -czvf $BK/$DIA/$DIA-backup.tar.gz $BK/$DIA/$DIA-backup.fbk >> $LOG 2>&1
ls -la $BK/$DIA/$DIA-backup.tar.gz >> $LOG && echo ' ' >> $LOG
echo 'A copia da base de dados foi compactada com sucesso!' >> $LOG && 
echo ' ' >> $LOG && echo ' ' >> $LOG

echo 'Compactando o backup da base de dados...' >> $LOG
tar -czvf $BK/$DIA/$DIA-base.tar.gz $BK/$DIA/$DIA-base.fdb >> $LOG 2>&1
ls -la $BK/$DIA/$DIA-base.tar.gz >> $LOG && echo ' ' >> $LOG
echo 'O backup da base de dados foi compactado com sucesso!' >> $LOG && 
echo ' ' >> $LOG


#
# Restaura a base de dados
#
echo ' ' >> $LOG
echo 'Iniciando restore da base de dados usando GBAK' >> $LOG
echo -n 'Hora inicial: ' >> $LOG && date +%H:%M >> $LOG
$GB -r -v -z -N -user $US -password $PW $BK/$DIA/$DIA-backup.fbk 
$PH/$DIA-base.fdb >> $LOG 2>&1
echo 'Restore efetuado com sucesso!' >> $LOG
echo -n 'Hora final: ' >> $LOG && date +%H:%M >> $LOG && echo ' ' >> $LOG


#
# Renomeia os arquivos e atribui privilegios
#
echo 'Removendo arquivos velhos (OLD)' >> $LOG
rm $PH/$DB-old
echo 'Arquivos antigos (OLD) removidos com sucesso!' >> $LOG && echo ' ' 
 >> $LOG

echo 'Renomeando a base de dados atual para OLD' >> $LOG
mv $PH/$DB $PH/$DB-old
echo 'Base de dados renomeada para OLD com sucesso!' >> $LOG && echo ' ' 
 >> $LOG

echo 'Renomeando a base restaurada para o nome real da base' >> $LOG
mv $PH/$DIA-base.fdb $PH/$DB
echo 'Base de dados renomeada para '$DB' com sucesso!' >> $LOG && echo ' 
' >> $LOG

echo 'Mudando o usuario e grupo donos da base para FIREBIRD:FIREBIRD' >> 
$LOG
chown firebird:firebird $PH/$DB
echo 'Mudanca de proprietario e grupo FIREBIRD efetuada com sucesso!' >> 
$LOG && echo ' ' >> $LOG

echo 'Aplicando permissao total 777 ao arquivo da base' >> $LOG
chmod 777 $PH/$DB >> $LOG 2>&1
echo 'Permissao aplicada com sucesso!' >> $LOG && echo ' ' >> $LOG


#
# Volta a base de dados para o estado ONLINE
#
echo 'Voltando a base de dados para o estado ONLINE' >> $LOG
$GF -online -user $US -password $PW $PH/$DB >> $LOG 2>&1  && echo ' ' >> 
$LOG
echo 'Base ONLINE!' >> $LOG && echo ' ' >> $LOG


echo -n 'Data: ' >> $LOG && date +%d/%m/%Y-%H:%M:%S >> $LOG
echo '*** Fim do backup diario ***' >> $LOG  && echo ' ' >> $LOG

#
# Coloca mensagem no console avisando sobre o final, mostrando
# data e hora novamente.
echo ' '
echo -n 'Processo de backup finalizado com sucesso em: ' && date 
+%d/%m/%Y' - as '%H:%M
echo ' '


-->> recorte aqui <<--
*--* Final do script *--*

---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a