http://paco8822.pixnet.net/blog/post/55440285-批次執行資料庫備份並刪除過期檔案
執行步驟為
1. 寫好備份SQL語法
2.寫好執行T-SQL語法之批次檔
3.設定執行批次檔
4.執行定期刪除過期備份檔案之批次檔
1. 寫好備份SQL語法
DECLARE @DBName varchar(30)
Declare @BkFile Varchar(200)
Declare @BkFolder Varchar(200)
--設置需要備份的資料庫
SET @DBName='TEST_DB'
--設定存放備份文件的文件夾
SET @BkFolder='D:\backUp_File\backup_data'
--備份檔文件名
SET @BkFile=@BkFolder + '\'+@DBName + '.BAK'
--執行備份
BackUp Database @DBName To Disk=@BkFile
Declare @BkFile Varchar(200)
Declare @BkFolder Varchar(200)
--設置需要備份的資料庫
SET @DBName='TEST_DB'
--設定存放備份文件的文件夾
SET @BkFolder='D:\backUp_File\backup_data'
--備份檔文件名
SET @BkFile=@BkFolder + '\'+@DBName + '.BAK'
--執行備份
BackUp Database @DBName To Disk=@BkFile
寫完之後 另存為 BackUp.sql
2.寫好執行T-SQL語法之批次檔
# sqlcmd -S 【資料庫登入 EX: 127.0.0.1\DB】 -E -i 【寫好之備份語法之SQL檔 EX: BackUp.sql】
sqlcmd -S 127.0.0.1\DB -E -i D:\backUp_File\BackUp.sql
#備份完成後,壓縮.BAK檔,以免太大佔空間
set TODAY=%DATE:/=%
set THISDATE=%TODAY:~0,8%
path C:\Program Files (x86)\7-Zip
7z a -tzip D:\backUp_File\backup_data\dbzip_%THISDATE%.zip D:\backUp_File\backup_data\TEST_DB.BAK
#執行完本機備份後,再備一份到異地
copy D:\backUp_File\backup_data\dbzip_%THISDATE%.zip K:\
del D:\backUp_File\backup_data\TEST_DB.BAK
sqlcmd -S 127.0.0.1\DB -E -i D:\backUp_File\BackUp.sql
#備份完成後,壓縮.BAK檔,以免太大佔空間
set TODAY=%DATE:/=%
set THISDATE=%TODAY:~0,8%
path C:\Program Files (x86)\7-Zip
7z a -tzip D:\backUp_File\backup_data\dbzip_%THISDATE%.zip D:\backUp_File\backup_data\TEST_DB.BAK
#執行完本機備份後,再備一份到異地
copy D:\backUp_File\backup_data\dbzip_%THISDATE%.zip K:\
del D:\backUp_File\backup_data\TEST_DB.BAK
3.設定執行批次檔
執行WINDOWS或是備份軟體,去執行寫好的批次檔
4.執行定期刪除過期備份檔案之批次檔
forfiles /P D:\xxx\ /M *.ZIP /D -15 /C "cmd /c del @path"
FORFILES [/P pathname] [/M searchmask] [/S]
[/C command] [/D [+ | -] {yyyy/MM/dd | dd}]
描述:
選取一個檔案 (或一組檔案),並在檔案上執行命令。
[/C command] [/D [+ | -] {yyyy/MM/dd | dd}]
描述:
選取一個檔案 (或一組檔案),並在檔案上執行命令。
參數清單:
/P pathname 表示要開始搜尋的路徑。
預設資料夾是目前的目錄 (.)。
/M searchmask 根據 searchmask 搜尋檔案。
預設的 searchmask 是 '*'。
/S 指示 forfiles 遞迴搜尋子目錄。例如 "DIR /S"。
/C command 表示每個檔案要執行的命令。
命令字串應該包含在雙括號之間。
預設的命令是 "cmd /c echo @file"。
下列變數可以使用於命令字串:
@file - 傳回檔案的名稱。
@fname - 只傳回檔案的名稱,不傳附檔名。
@ext - 只傳回檔案的附檔名。
@path - 傳回檔案的完整路徑。
@relpath - 傳回檔案的相對路徑。
@isdir - 如果檔案類型是目錄的話,
傳回 "TRUE",如果是檔案的話,傳回 "FALSE"。
@fsize - 傳回檔案的大小,單位是位元組。
@fdate - 傳回檔案上次修改的日期。
@ftime - 傳回檔案上次修改的時間。
要在命令列中包含特殊字元的話,請使用 0xHH 格式的十六
進位字元碼 (例如 0x09 代表 tab)。
內部的 CMD.exe 命令應該以 "cmd /c" 執行。
/D date 選取檔案上次修改的時間大於、等於 (+) 或小於或等於 (-)、
使用 "yyyy/MM/dd" 格式表示指定的日期;
或選取檔案日期上次修改的時間大於或等於 (+)
目前的日期再加上"dd" 天、小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
/? 顯示這個說明訊息。
/P pathname 表示要開始搜尋的路徑。
預設資料夾是目前的目錄 (.)。
/M searchmask 根據 searchmask 搜尋檔案。
預設的 searchmask 是 '*'。
/S 指示 forfiles 遞迴搜尋子目錄。例如 "DIR /S"。
/C command 表示每個檔案要執行的命令。
命令字串應該包含在雙括號之間。
預設的命令是 "cmd /c echo @file"。
下列變數可以使用於命令字串:
@file - 傳回檔案的名稱。
@fname - 只傳回檔案的名稱,不傳附檔名。
@ext - 只傳回檔案的附檔名。
@path - 傳回檔案的完整路徑。
@relpath - 傳回檔案的相對路徑。
@isdir - 如果檔案類型是目錄的話,
傳回 "TRUE",如果是檔案的話,傳回 "FALSE"。
@fsize - 傳回檔案的大小,單位是位元組。
@fdate - 傳回檔案上次修改的日期。
@ftime - 傳回檔案上次修改的時間。
要在命令列中包含特殊字元的話,請使用 0xHH 格式的十六
進位字元碼 (例如 0x09 代表 tab)。
內部的 CMD.exe 命令應該以 "cmd /c" 執行。
/D date 選取檔案上次修改的時間大於、等於 (+) 或小於或等於 (-)、
使用 "yyyy/MM/dd" 格式表示指定的日期;
或選取檔案日期上次修改的時間大於或等於 (+)
目前的日期再加上"dd" 天、小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
/? 顯示這個說明訊息。
沒有留言:
張貼留言