目的:
將WIN2008操作系統上備份的DB2數據庫鏡像備份至LINUX系統上的備份服務器。即當月備份的數據庫備份文件在本地和備份服務器上各保留最近的10份,一個月之前的備份文件,一個月保留一份。
本地環境:操作系統Windows server 2008 R2 Standard ,數據庫版本DB2 V9.7
數據庫備份服務器環境:操作系統Red Hat Enterprise Linux Server release 5.8 (Tikanga)。
前提條件:數據庫備份服務器安裝Samba服務器,實現Windows與Linux共享。安裝Samba服務器在前一篇文章中有介紹。
腳本代碼思路:
1.獲取數據庫的備份路徑。
2.在線整庫備份數據庫。
3.將備份文件壓縮,並刪除原備份文件,將壓縮文件上傳至服務器。
備份腳本1:
@echo off
echo *** %DATE% ***
echo *** %TIME% ***
::初始化本地備份home目錄,和服務器備份home目錄。Z盤是數據庫服務器的共享目錄掛在到本地系統的目錄。
setTHISDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set homebackupdir=D:\DB2\DB-BACK
set serverhomebackupdir=Z:\DB-BACK
echo backupdate: %THISDATE%
echo homebackupdir:%homebackupdir%
echoserverhomebackupdir:%serverhomebackupdir%
::獲取上個月備份目錄
set year=%DATE:~0,4%
set curmoth=%DATE:~5,2%
echo curmoth:%curmoth%
if %curmoth% equ 01 ( set lastmoth=12 )else ( echo ----------- )
if %curmoth% equ 02 ( set lastmoth=01 )else ( echo ----------- )
if %curmoth% equ 03 ( set lastmoth=02 )else ( echo ----------- )
if %curmoth% equ 04 ( set lastmoth=03 )else ( echo ----------- )
if %curmoth% equ 05 ( set lastmoth=04 )else ( echo ----------- )
if %curmoth% equ 06 ( set lastmoth=05 )else ( echo ----------- )
if %curmoth% equ 07 ( set lastmoth=06 )else ( echo ----------- )
if %curmoth% equ 08 ( set lastmoth=07 )else ( echo ----------- )
if %curmoth% equ 09 ( set lastmoth=08 )else ( echo ----------- )
if %curmoth% equ 10 ( set lastmoth=09 )else ( echo ----------- )
if %curmoth% equ 11 ( set lastmoth=10 )else ( echo ----------- )
if %curmoth% equ 12 ( set lastmoth=11 ) else( echo ----------- )
echo lastmoth:%lastmoth%
set lastmothbackupfilesdir=%homebackupdir%\%year%%lastmoth%
echolastmothbackupfilesdir:%lastmothbackupfilesdir%
::end 獲取上個月備份目錄
::獲取當前備份目錄,如果是月初1號,則分別在本地和服務器上創建本月的備份目錄,並刪除上個月的備份文件,只保留一份。
set backupmoth=%DATE:~0,4%%DATE:~5,2%
setbackupfilesdir=%homebackupdir%\%backupmoth%
setserverbackupdir=%serverhomebackupdir%\%backupmoth%
echo serverbackupdir:%serverbackupdir%
echo backupfilesdir:%backupfilesdir%
d:
cd %homebackupdir%
cd
if exist %backupmoth% (
echobackupfilesdir exist ) else (
mkdir%backupmoth%
mkdir%serverhomebackupdir%\%backupmoth%
cd%lastmothbackupfilesdir%
cd
echodelete %year%%lastmoth% backup only save one backup file
::這裏爲什麼是d -2,我不知道怎麼解釋,當d-1時會刪除所有文件,d -2會保留一個文件。
forfiles/p "%lastmothbackupfilesdir%" /m *.zip /d -2 /c "cmd /c del@path"
forfiles/p "%serverhomebackupdir%\%year%%lastmoth%" /m *.zip /d -2 /c"cmd /c del @path"
iferrorlevel 0 (echo delete %year%%lastmoth% backupfiles success) else (echodelete %year%%lastmoth% backupfiles fail)
)
exit
以上即備份腳本1,實現獲取備份目錄的作用。
備份腳本2:
實現在線備份數據庫。
@echo off
set curmoth=%DATE:~0,4%%DATE:~5,2%
set homebackupdir=D:\DB2\DB-BACK
setbackupfilesdir=%homebackupdir%\%curmoth%
"C:\Program Files\IBM\SQLLIB\BIN\db2cmd.exe" db2 backup db 數據庫名 online to "%backupfilesdir%" include logs
exit
注意:db2cmd.exe :爲你安裝db2的路徑下的可執行程序。我這裏是安裝在C:\Program Files\IBM\SQLLIB\BIN\目錄。
備份腳本3:
壓縮數據庫備份文件並複製至數據庫備份服務器。還有刪除當前備份路徑下10天前的備份文件。
@echo off
set curmoth=%DATE:~0,4%%DATE:~5,2%
set homebackupdir=D:\DB2\DB-BACK
setbackupfilesdir=%homebackupdir%\%curmoth%
set serverhomebackupdir=Z:\ DB-BACK
set serverbackupdir=%serverhomebackupdir%\%curmoth%
echo ----- compression the backup files-----
d:
cd %backupfilesdir%
::獲取數據庫備份文件名
dir /a /b *.001 >tmp.txt
set /p "zipname="<"tmp.txt"
echo zipname:%zipname%
"C:\Program Files(x86)\WinRAR\Rar.exe" a %zipname%.zip %zipname%
xcopy %zipname%.zip %serverbackupdir%
del %zipname%
del tmp.txt
::刪除當前備份目錄下10天前的備份文件
d:
cd %backupfilesdir%
cd
echo ------ delete %backupfilesdir% backupfiles 10 days ago------
forfiles /p "%backupfilesdir%" /m*.zip /d -10 /c "cmd /c del @path"
forfiles /p "%serverbackupdir%"/m *.zip /d -10 /c "cmd /c del @path"
if errorlevel 0 ( echo delete delete%backupfilesdir% backup files 10 days ago success ) else ( echo delete%backupfilesdir% backup files 10 days ago fail )
exit
至此,備份腳本全部寫完。
還有最後一步,就是將這三個腳本添加到系統的定時任務。每個腳本定時作業之間的時間間隔需要根據你的具體情況設定。我這裏將定時作業1與定時作業2之間的時間設爲5分鐘,定時作業2與定時作業3之間的時間間隔設爲15分鐘。