10
Jan
Windows script for a DB2 backup
Author: rberthou
DB2 Backup Script
A database is very usefull but it’s always important to backup very often your data. To do this IBM/DB2 gives you a graphic interface quite simple to use “Control-Center”, but if you want you include this backup in a batch script you must write a backup script without GUI.
In this new I explain how to write a windows script procedure (.bat or .cmd) to backup your DB2 database.
In this sample I considered that you must close your database before backup ( It’s possible to do this in “ONLINE” mode but it’s more complexe — include log file, rollforward…–) and I use a database SAMPLE (it is his name) for this test .
the goal of this scripts is to :
- Quiesce database (close)
- Backup your data
- UnQuiesce database (open)
- Zip backup file
- Clean/Delete old backup rows in DB2 catalogue
- Delete old backup files
DB2 command
To execute in a script a command you must initialize DB2 working context. In Windows it is made by a db2cmd but in linux/unix you can do this with the execution of db2profile.
Commands :
File sample_backup.db2
CONNECT TO sample ;
QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS;
CONNECT RESET;
BACKUP DATABASE sample TO "C:\db2_backup" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING;
CONNECT TO sample;
UNQUIESCE DATABASE;
CONNECT RESET;
TERMINATE ; |
Warning : If your current user can not be connected to your database to make a backup you must change this user in CONNECT with these parameters.
CONNECT TO sample USER monuser USING monpassword; |
DB2 saves in his catalogue somes informations about each backup. I advise you to clean it often with the command PRUNE HISTORY .
PRUNE HISTORY 20071021 AND DELETE; |
This command will delete from the catalogue the informations on previous backup and will delete associated log files
Batch script file
In my opinion I’m not a Windows batch specialist and according to me the date calculation (delmax) of this script can be amelirated (more simple).
@echo off
REM +----------------------------------------------------------+
REM + DB2 Windows backup script width delete +
REM +----------------------------------------------------------+
REM + Ver. + Autor + Remarques +
REM +------+----------+----------------------------------------+
REM + 1.00 + RBerthou + +
REM +----------------------------------------------------------+
REM +-- Attention les numeriques de la forme 01 .. 0999 sont -+
REM +-- considérés comme des nb octal donc prb de calcul -+
REM +-- d ou l ajout du 1 devant certaines variables -+
REM +- Warning the date est au considéré au format français -+
REM +- Format de la date "dd/mm/yyyy" -+
REM +- a modifier suivant vos paramètres -+
for /f "tokens=1-4 delims=/-\ " %%a in ('date /t') do (
set mjour=%%a
set mmois=%%b
set mannee=%%c
)
set mydate=%mannee%%mmois%%mjour%
set nbhisto=07
if /I "%mjour%" GTR "%nbhisto%" (
set /a mjour=1%mjour%-1%nbhisto%
) else (
if /I "%mmois%" == "01" (
set /a mannee=%mannee%-1
set /a mmois=12
) else (
set /a mmois=%mmois%-1
)
set /a mjour=1%mjour%+30-1%nbhisto%
)
if %mmois% LSS 10 ( set mmois=0%mmois%)
if %mjour% LSS 10 ( set mjour=0%mjour%)
set delmax=%mannee%%mmois%%mjour%
REM +- End init -+
set destdir=c:/db2_backup
set db2backupdir=%destdir%/SAMPLE.0/DB2/NODE0000/CATN0000
echo "DB2 Backup date=%mydate%"
db2cmd /c /w /i db2 -v -t -f%destdir%/sample_backup.db2 -z%destdir%/sample_backup.log
if not %errorlevel% == 0 (
echo "ERROR: Backup Error backupDB2, RC=%errorlevel% "
goto fin
)
echo "Compress DB2 Backup file"
del /S %destdir%/db2_zip.jar
jar.exe -cvf %destdir%/db2_zip.jar %db2backupdir%/%mydate%
if not %errorlevel% == 0 (
echo "ERROR: Backup Error zipDB2, RC=%errorlevel% "
goto fin
)
echo "DB2 delete catalogue Backup before %delmax%"
db2cmd /c /w /i db2 -v CONNECT TO sample
db2cmd /c /w /i db2 -v prune history %delmax% and delete
db2cmd /c /w /i db2 -v CONNECT RESET
db2cmd /c /w /i db2 -v TERMINATE
if not %errorlevel% == 0 (
echo "ERROR: Backup Error, deleteDB2 RC=%errorlevel% "
goto fin
)
echo "DB2 delete previos backup files (before %delmax%)"
for /f "skip=%nbhisto%" %%i in ('dir %db2backupdir% /b /o:-n') do (
rmdir /Q/S %%i
if not %errorlevel% == 0 (
echo "ERROR: Backup Error, deleteHisto RC=%errorlevel% "
)
)
:fin
if %errorlevel% == 0 (
echo " DB2 backup ok date=%mydate% "
) else (
echo " Error in DB2 backup date=%mydate% "
) |
Remarques
- I advise you, of course, to test this script in developpement environnement and mainly to try to test a restore procedure.
- You can also make an Online database or tablespace backup but it’s more difficult (include log, rollforward,…) and if you are interested in that I write a new on this on the following weeks.
Links
Introduction to DB2 UDB Scripting on Windows
Exemple de script batch windows
5 Responses pour"Windows script for a DB2 backup"
Finally! A concise and working example for Windows.
Thank you so much.
I tried to code a script file inspired by yours, but found no set of db2cmd options able to make this work:
db2cmd /c /w /i db2 -v CONNECT TO sample
db2cmd /c /w /i db2 -v prune history %delmax% and delete
db2cmd /c /w /i db2 -v CONNECT RESET
db2cmd /c /w /i db2 -v TERMINATE
Apparently, each db2cmd command opens a new DB2 Command Window, run the db2 command in it and then closes it. This way, the second (running PRUNE HISTORY) does no longer find a connection to “sample” database, since CONNECT ran in a different DB2 Command Window.
Tried with just the /i option, but even this didn’t work. I tested different option combinations, but none left the connection to DB2 opened for the second execution. Finally, I desisted to code this way, as there were two alternatives:
1 – Run db2cmd once, using a file. The script follows this when it executes the file sample_backup.db2
2 – Open a DB2 Command Window and run the CMD script there. This CMD should not use db2cmd, just db2.
For instance, the command below opens a DB2 Command Window and executes the myscript.cmd inside it.
db2cmd /c /w /i myscript.cmd
Inside myscript, the above CLP commands must be written this way (no db2cmd, just db2):
db2 -v CONNECT TO sample
db2 -v prune history %delmax% and delete
db2 -v CONNECT RESET
db2 -v TERMINATE
Best regards,
Mariano Corral
Im trying with this.. meantime can i have script for without closing connections\ online backup.
plz any one can provide restore command to restore DB2 dumps in window
Wow!!! Great script …
Thanks a million.
Ajouter une réponse