Construindo scripts eficientes: Backup online com o probkup

Escrito por Adriano Corrêa em 5 de julho de 2011, 13:34h

A quase dois anos atrás publiquei esse artigo sobre a idéia de construir scripts simples para tarefas de administrar os bancos de dados Progress. Seguindo a mesma linha de raciocínio, apresento aqui um exemplo de script simples que possa executar o backup online do banco de dados.

Existe uma complicação quando falamos de backup online. Imagine uma transação que altera registros em dois bancos de dados: bancoA e bancoB. Quando a transação inicia, o bancoA já estava em processo de backup. Logo, os registros alterados por essa transação não estarão gravados no backup. Terminada a transação e o backup do bancoA, começa o backup do bancoB. Os registros alterados pela mesma trasação estarão gravados no backup. Caso você precisa restaurar o backup, haverá inconsistência nos seus dados.

Isso ocorre porque para o programa, a transação é única. Para o banco de dados, a transação é uma para cada banco. Esse artigo é um bom material de referência para entender como isso funciona.

Dessa forma, o primeiro passo no seu script de backup é varrer todos os bancos de dados que você possua.

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

Esse script executará o backup simultaneamente para todos os bancos de dados, através de um segundo script chamado backup-bd.bat. O backup dos bancos será gravado no diretório d:\simula\backupbd e o backup dos after-images será gravado no diretório d:\simula\backupai.

O script backup-bd.bat deverá primeiramente definir variáveis de ambiente caso elas não sejam padrão em seu ambiente.

  [backup-bd.bat]
    set DLC=c:\dlc102b
    set PATH=%DLC%;%DLC%\bin;%PATH%
    ...

O código a seguir faz o backup de todos os extents full do banco de dados, marcando o horário de cópia e a ordem do extent. Lembrando que o banco pode ter mais de um extent full, por isso o teste tem que estar em uma estrutura de repetição.

  [backup-bd.bat]
    ...
    :TESTEFULL
      for /F "usebackq tokens=3,2,1 delims=/ " %%i in (`date /t`) do set datai=%%k%%j%%i
      for /F "usebackq tokens=1,2 delims=: " %%i in (`time /t`) do set horai=%%i%%j
      for /F "usebackq" %%i in (`_rfutil %1 -C aimage extent full`) do set arqai=%%i
      if exist %arqai% (
        for /F "usebackq tokens=1" %%i in (`_rfutil %1 -C aimage query sequence by name %arqai%`) do set seqai=%%i
        for /F "usebackq" %%i in (`_rfutil %1 -C aimage extent full`) do call _rfutil %1 -C aimage extract -a %%i -o %3\%%~ni-%datai%%horai%-%seqai%.bka
        call _rfutil %1 -C aimage extent empty %arqai% 
        goto TESTEFULL
      ) else goto EXECBACKUP
    ...

After-images copiados, o próximo passo é o backup do banco de dados.

  [backup-bd.bat]
    ...
    :EXECBACKUP
      call probkup online %1 %2\%1-%datai%%horai%.bkp
    ...

Para concluir, faça o backup das extensões de after-images que foram trocadas pelo backup online.

  [backup-bd.bat]
    ...
    for /F "usebackq" %%i in (`_rfutil %1 -C aimage extent full`) do set arqai=%%i
    for /F "usebackq tokens=1" %%i in (`_rfutil %1 -C aimage query sequence by name %arqai%`) do set seqai=%%i
    call _rfutil %1 -C aimage extract -a %arqai% -o %3\%1-%datai%%horai%-%seqai%.bka
    call _rfutil %1 -C aimage extent empty %arqai%

Esses scripts permitirão backup completo de todos os banco, assim como backup das extensões de after-image. Caso deseje copiar o after-image para outro servidor para ser aplicado posteriormente em contingência, mapeie uma unidade de rede com o comando net use e copie normalmente com o comando xcopy.

Categorias: Banco de dados | Progress

Tags: , , ,

Comentar

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

Acesso LogMeIn

Informe o código PIN: