Construindo scripts eficientes: Backup diferencial com Progress OpenEdge

Escrito por Adriano Corrêa em 2 de agosto de 2011, 17:36h

O backup diferencial é bastante comum nos sistemas gerenciadores de banco de dados. Conceitualmente, trata-se de um backup realizado apenas dos blocos de banco que sofreram alteração desde o último backup completo.

No Progress OpenEdge o backup diferencial tem uma característica diferente. O parâmetro –io determina a quantidade de backups que devem ser descartados para determinar o bloco que foi alterado desde o último backup, seja ele completo ou incremental.

Ou seja, se o parâmetro –io tiver o valor 0, serão copiados no backup todos os blocos desde o último backup. Se for passado o valor 1, serão copiados todos os blocos desde o penúltimo backup, e assim sucessivamente.

Colocar essa rotina em um backup diário é um pouco complicado. Sugiro neste artigo um exemplo de como implementar um backup completo no final de semana e backups diferenciais no restante dos dias da semana.

O primeiro passo é um script simples de backup que irá parar os bancos, truncar o before-image, fazer o backup e recarregar o banco.

  [backup-completo.bat]
    set DLC=c:\dlc102b
    set PATH=%DLC%;%DLC%\bin;%PATH%
    call dbman –all -stop
    for %%i in (*.db) do @(
      call proutil %%~ni –C truncate bi
      copy %%~ni.lg d:\simula\backuplog\
      call prolog %%~ni
      del d:\simula\backupbd\%%~ni.bkp
      probkup %%~ni d:\simula\backupbd\%%~ni.bkp
    )
    call 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.

  [backup-incremental.bat]
    for %%i in (*.db) do start cmd /c backup-bd.bat %%~ni d:\simula\backupbd

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.bat faz o backup incremental, desconsiderando a quantidade de backups incrementais já efetuados na semana.

  [backup-bd.bat]
    for /F "eol=; delims=" %%i in (bkp-%1.txt) do echo %%i > bkp-%1.tmp
    for /F "usebackq" %%i in (`type bkp-%1.tmp`) do @(
      del %2\%1.%%i
      call probkup online %1 %2\%1.%%i incremental -io %%i
      del bkp-%1.txt
      if %%i EQU 5 (
        for /L %%j in (5,-1,0) do echo %%j >> bkp-%1.txt
      ) else (
        for /L %%j in (5,-1,0) do if %%j LEQ %%i (
          echo ;%%j >> bkp-%1.txt
        ) else (
          echo %%j >> bkp-%1.txt
        )
      )
    )
    del 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 ponto-e-vírgula 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 (9) -

em 10 de agosto de 2011, 08:11h

olá Adriano muito bom seus post!!
cara eu to começando agora no mundo progress"" rs.. gostaria que se fosse possivel.. vc me mandar algumas apostila do progress basico, alguns exemplos.. é possivel?
abrass
se vc quizer me add no msn...(djdindo@msn.com)

Alessandro

em 10 de agosto de 2011, 11:28h

Obrigado Alessandro.

Não reescrevemos documentações da Progress, porém ela disponibilizada os manuais em seu site: communities.progress.com/pcom/docs/DOC-103525

Além dos manuais, a Progress também ministra treinamentos em administração e desenvolvimento. Esses treinamento não são muito avançados, pois não trarão a realidade de um ambiente complexo. Porém para iniciar ajuda bastante.

Adriano.

adriano

em 28 de setembro de 2011, 23:36h

Boa noite Adriano.

Fui consultor de Tecnologia (Datasul) durante 5 anos e atualmente ainda trabalho com estes.
Este post com certeza nos será muito útil, creio que principalmente em clientes com tempo de backup elevado.

Me surgiu uma dúvida: O tempo de execução deste backup é proporcional ao backup convencional, levando em consideração o tamanho? Ou seja, se a base do cliente tem 200GB e "cresce" 30MB por dia (imaginamos que seja apenas um banco, no exemplo) o tempo é relativo a estes 30MB ou tem algo a mais?

Outra coisa, em muitos clientes, encontrava backups que, creio eu, são feitos de forma errada... Se tem 3 bancos (CAD, MOV e ESP), alguns deles fazem 1 após outro (cad, depois mov, depois esp). Isso é errado, correto? O correto é iniciar os 3 bancos juntos, certo?

Abraços.

Murilo

em 28 de setembro de 2011, 23:39h

Me esqueci de mais um comentário!!!

No caso de necessidade de restore deste tipo de backup apresentado, como funcionaria?

Abraços.

Murilo

em 30 de setembro de 2011, 08:20h

Olá Murilo

Suas duas perguntas são muito boas.

Primeiro, o backup irá copiar todos os blocos de banco alterados. Ou seja, além dos aproximadamente 30 mega, também copiará os blocos que sofreram alteração mas não impactaram no tamanho do banco. Por exemplo, alteração de campo data, continuará com o mesmo tamanho, apenas o valor foi alterado. Nesse caso, o bloco inteiro que contenha essa informação será copiado no backup.

A segunda pergunta, para o produto Datasul, obrigatoriamente tem que usar after-image para fazer backup online. Mesmo que todos os backups sejam iniciados ao mesmo tempo, pode acontecer que na fração de segundos entre o início do backup dos bancos, alguma transação seja iniciada. Se retornar o backup, ficará inconsistente. O after-image elimina o problema pois, além da restauração do backup, haverá o rollback do after-image que completará as transações.

Adriano.

adriano

em 3 de outubro de 2011, 11:12h

Mais um bom motivo para unificar os bancos de dados tanto quanto possível :)
Se houver apenas 1 banco o backup com probkup será consistente. Não há necessidade de se preocupar com a sincronia de vários bancos...

kirchner

em 15 de outubro de 2011, 11:19h

Legal Adriano!

A primeira pergunta, foi totalmente entendida.
A segunda, me deixou um pouco preocupado...rs... Digo isso, porque aqui na região (São Paulo, Campinas e regiões metropolitanas de ambas) acredito que apenas 15% dos clientes que utilizam Datasul, tem implementado o AI. Neste caso, da fração de segundos (apesar de que a "olho nu") é imperceptível, concordo com você que possa vir a acontecer... Esta inconsistência, em 99% dos casos não deve trazer um problema sério... OU estou errado?

Abraços,

Murilo Guimarães

Murilo

em 17 de outubro de 2011, 08:13h

Não tem como prever o tipo da inconsistência. Não conheço as rotinas do produto para ter certeza como funciona, mas um exemplo é um pedido que dá baixa em estoque de um item. Se a tabela de pedido estiver em um banco diferente da tabela de estoque, pode ser que o pedido esteja no backup e a baixa de estoque não esteja, o que resultaria em informação de estoque inconsistente. É um exemplo.

É uma preocupação realmente a quantidade de ambientes que não possuem after-image. Além do problema da inconsistência do backup, se a cópia do banco é feita toda noite e acontecer algum desastre as 18:00 horas, será perdido um dia inteiro de dados se não possuir o after-image. A pergunta que deve ser feita, é quanto tempo de dados pode ser perdido no banco? Se a resposta for zero e não tem after-image, existe um problema na administração.

Adriano.

adriano

em 20 de outubro de 2011, 16:27h

Entendido!

Bom, depende muito do tamanho do cliente...

Tenho cliente que tem base de dados pequena, backup em 10 minutos e ele realiza 3x ao dia. Tenho cliente que o backup demora 6 horas, só faz a noite... heheh...

Mas é isso aí. Obrigado pelas respostas.

Abraços,

Murilo

Murilo

Comentar

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

Acesso LogMeIn

Informe o código PIN: