windows db2備份至Linux備份服務器之腳本實現

目的:

         將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分鐘。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章