Upload
valmir-alves-dos-santos
View
7
Download
4
Embed Size (px)
DESCRIPTION
Construindo Scripts Eficientes de Backup com o probkp - Progress
Citation preview
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.
[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.