Você está na página 1de 2

Construindo scripts eficientes: Backup online com o probkup

Escrito por Adriano Corraem 5 de julho de 2011, 13:34h

A quase dois anos atrs publiquei esse artigo sobre a idia de construir scripts simples para tarefas de
administrar os bancos de dados Progress. Seguindo a mesma linha de raciocnio, apresento aqui um
exemplo de script simples que possa executar o backup online do banco de dados.
Existe uma complicao quando falamos de backup online. Imagine uma transao que altera registros
em dois bancos de dados: bancoA e bancoB. Quando a transao inicia, o bancoA j estava em processo
de backup. Logo, os registros alterados por essa transao no estaro gravados no backup. Terminada a
transao e o backup do bancoA, comea o backup do bancoB. Os registros alterados pela mesma
trasao estaro gravados no backup. Caso voc precisa restaurar o backup, haver inconsistncia nos
seus dados.
Isso ocorre porque para o programa, a transao nica. Para o banco de dados, a transao uma
para cada banco. Esse artigo um bom material de referncia 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, atravs de um segundo
script chamado backup-bd.bat. O backup dos bancos ser gravado no diretrio d:\simula\backupbd e o
backup dos after-images ser gravado no diretrio d:\simula\backupai.
O script backup-bd.bat dever primeiramente definir variveis de ambiente caso elas no sejam padro
em seu ambiente.

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

O cdigo a seguir faz o backup de todos os extents full do banco de dados, marcando o horrio de cpia 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 repetio.

[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 prximo passo o backup do banco de dados.

[backup-bd.bat]
...
:EXECBACKUP
call probkup online %1 %2\%1-%datai%%horai%.bkp
...
Para concluir, faa o backup das extenses 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 permitiro backup completo de todos os banco, assim como backup das extenses de afterimage. Caso deseje copiar o after-image para outro servidor para ser aplicado posteriormente em
contingncia, mapeie uma unidade de rede com o comando net use e copie normalmente com o comando
xcopy.