construindo scripts eficientes probkp

2
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

Upload: valmir-alves-dos-santos

Post on 24-Dec-2015

7 views

Category:

Documents


4 download

DESCRIPTION

Construindo Scripts Eficientes de Backup com o probkp - Progress

TRANSCRIPT

Page 1: Construindo Scripts Eficientes Probkp

Construindo scripts eficientes: Backup online com o probkup

Escrito por Adriano Corrêaem 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.

Page 2: Construindo Scripts Eficientes Probkp

  [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.