Complementando o artigo backup diferencial com Progress OpenEdge em Windows, este artigo tem por objetivo demonstrar a mesma rotina de backup, porém em Linux ou Unix. Consulte esse artigo também para demais informações conceituais de backup diferencial.
Sempre destaco que o comportamento do Progress OpenEdge, assim como os comandos utilizados, são iguais para qualquer ambiente.
O primeiro passo que deixo de exemplo tem como objetivo executar um simples backup completo offline para todos os bancos. Ele irá parar os bancos, truncar o before image e o log, fazer backup e recarregar o banco.
| [backup-completo.sh] |
| dbman –all -stop |
| for arq in `ls *.db` |
| do |
| export banco=`basename $arq .db` |
| proutil $banco –C truncate bi |
| cp $banco.lg /simula/backuplog/ |
| prolog $banco |
| rm –f /simula/backupbd/$banco.bkp |
| probkup $banco /simula/backupbd/$banco.bkp |
| done |
| dbman –all -start |
Com o backup completo feito, deseja-se agora fazer um backup diferencial em cada dia da semana. Para isso, utilizamos um script que seleciona todos os bancos e executa o processo simultaneamente. Da mesma forma que o ambiente Windows, optei por varrer todos os bancos para executar o script de backup ao mesmo tempo.
| [backup-incremental.sh] |
| for banco in `ls *.db` |
| do |
| sh backup-bd.sh `basename $banco .db` /simula/backupbd & |
| done |
Será necessário um arquivo de controle que indicará quantos backups deverá desconsiderar, conforme o padrão do parâmetro –io. Deverá existir um arquivo para cada banco, cujo padrão que determinei para o meu exemplo foi bkp-<nome do banco>.txt
| [bkp-banco.txt] |
| 5 |
| 4 |
| 3 |
| 2 |
| 1 |
| 0 |
O script backup-bd.sh faz o backup incremental, desconsiderando a quantidade de backups incrementais já efetuados na semana.
| [backup-bd.sh] |
| #!/bin/bash |
| for num in `grep –v “^#” bkp-$1.txt` |
| do |
| echo $num > bkp-$1.tmp |
| done |
| for num in `cat bkp-$1.tmp` |
| do |
| rm –f $2/$1.$num |
| probkup onlne $1 $2/$1.$num incremental –io $num |
| rm –f bkp-$1.txt |
| if [ $num == 5 ]; then ( |
| for ((i=5;1 >= 0; i—)) |
| do |
| echo $1 >> bkp-$1.txt |
| done |
| ) |
| else ( |
| for ((i=5; i >= 0; i—)) |
| do |
| if [ $i –le $num ]; then ( |
| echo \#$i >> bkp-$1.txt |
| ) |
| else ( |
| echo $i >> bkp-$1.txt |
| ) |
| fi |
| done |
| ) |
| fi |
| done |
| rm –f bkp-$1.tmp |
Neste script, o primeiro for é usado para identificar o valor a ser usado pelo parâmetro –io. O segundo for usa esse valor para eliminar o backup de uma semana atrás e realizar o novo backup. Em seguida o arquivo bkp-banco.txt é recriado, adicionando um sustenido na frente do número já utilizado. Ao final de 6 backups, o arquivo é recriado conforme original.