Wochentag in Windows Batch für PRE und POST Backup in VMware VADP

Im letzten Artikel habe ich das Thema PRE und POST Backup Skripte für VMware behandelt. Das wird i.d.R. eingesetzt um applikationskonsistente Snapshot-Backups (mit VMware VADP kompatibler Backup-Software) zu erzeugen.

Das Verfahren hat einen Nachteil. Egal welcher Wochentag bzw. welches Datum – man kann zunächst keine unterschiedliche Fallbehandlung mehr durchführen.

Workaround / Beispiel:

Eine Pervasive PSQL Datenbank soll sonntags OFFLINE, die restlichen Tage ONLINE gesichert werden.

Mit dem Tool butil kann man Pervasive PSQL Datenbanken in die „continious operation“ Betriebsart versetzen und so konsistent sichern. Dazu führt man vor dem Snapshot Erstellen das Tool butil mit dem Parameter -startbu und danach mit -endbu für jede Datenbank aus.

Für das OFFLINE Backup wird der Pervasive PSQL Datenbank-Dienst gestoppt.

Die Datenbank-Datendateien *.BIS liegen unter S:\DGU, Pervasive PSQL Binaries unter C:\PVSW\Bin.

C:\Program Files\VMware\VMware Tools\backupScripts.d\vcb.bat

echo off
if "%1" == "freeze" goto doFreeze
goto doThaw
:doFreeze
call c:\batch\vadp_backup\pre-freeze-script.bat
goto EOF
:doThaw
call c:\batch\vadp_backup\post-thaw-script.bat
:EOF

c:\batch\vadp_backup\pre-freeze-script.bat

REM *** pre backup ***

@echo off
REM Wochentag berechnen...
FOR /F "tokens=1,2,3 delims=." %%a in ('echo %date%') do set yy=%%c & set mm=%%b & set dd=%%a
set /a "TwoDigitYearMax=2038%%1000"
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
If %dow% equ 6 set "WoTa=Samstag"
If %dow% equ 7 set "WoTa=Sonntag"
if "%WoTa%" equ "Sonntag" goto OFFLINE

:ONLINE
REM ONLINE Backup Pervasive SQL
echo Heute ist ein %WoTa% - Online-Backup
@echo off
set PVSW=C:\PVSW\Bin
echo %DATE% / %TIME%
SET DGU=S:\DGU
if not exist %DGU%\*.BIS goto ERR1
for %%X in (%DGU%\*.BIS) do (
                echo %%X
                %PVSW%\BUTIL -startbu %%X
                echo ##########
)
goto ENDE

:ERR1
echo Keine Dateien %DGU%\*.BIS gefunden.
goto ENDE

:OFFLINE
REM OFFLINE Backup Pervasive SQL
echo Heute ist ein %WoTa% - Offline-Backup
net stop "Pervasive.SQL (transactional)" /y
goto ENDE

:ENDE

c:\batch\vadp_backup\post-thaw-script.bat

REM *** post backup ***

@echo off
REM Wochentag berechnen...
FOR /F "tokens=1,2,3 delims=." %%a in ('echo %date%') do set yy=%%c & set mm=%%b & set dd=%%a
set /a "TwoDigitYearMax=2038%%1000"
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
If %dow% equ 6 set "WoTa=Samstag"
If %dow% equ 7 set "WoTa=Sonntag"
if "%WoTa%" equ "Sonntag" goto OFFLINE

:ONLINE
REM ONLINE Backup Pervasive SQL
echo Heute ist ein %WoTa% - Online-Backup
@echo off
set PVSW=C:\PVSW\Bin
echo %DATE% / %TIME%
SET DGU=S:\DGU
if not exist %DGU%\*.BIS goto ERR1
for %%X in (%DGU%\*.BIS) do (
                echo %%XX
                %PVSW%\BUTIL -endbu %%X
                echo ##########
)
goto ENDE

:ERR1
echo Keine Dateien %DGU%\*.BIS gefunden.
goto ENDE

:OFFLINE
REM OFFLINE Backup Pervasive SQL
echo Heute ist ein %WoTa% - Offline-Backup
net start "Pervasive.SQL (transactional)" /y
goto ENDE

:ENDE

Danke an Miniversum für die Formel zur Wochentagsberechnung.

Dieser Beitrag wurde unter howto abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.