Construindo scripts eficientes: Backup diferencial com Progress OpenEdge em Linux/Unix

Escrito por Adriano Corrêa em 22 de agosto de 2011, 09:02h

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.

Categorias: Ambiente | Banco de dados

Tags: , ,

Comentários (1) -

em 29 de agosto de 2011, 14:31h

Não soube onde comentar, optei por aqui...

Vocês já utilizaram uma rotina para imprimir em impressora Zebra a partir do Progress.

Podia ter um post sobre isso...

Enio

Comentar

biuquote
  • Comentário
  • Pré-visualização
Loading

Acesso LogMeIn

Informe o código PIN: