本文將介紹如何以 DOS Batch、SQL Scripts、Windows 7 工作排程器來開發一個簡易的資料庫自動備份功能。包括:
- Backup.bat:DOS Batch 檔案,負責備份的啟動工作。
- Backup.sql:SQL Scripts 檔案,內含備份指令,由 Backup.bat 呼叫。
- 工作排程器:Windows 所內附功能,此處將以 Windows 7 進行說明。
建置步驟
2) 建立帳目資料庫 Expense,並以下列 SQL 指令建置 DETAIL_RECORD Table (記載帳目詳細資料)。
use Expense;
Create Table DETAIL_RECORD(
Record_Date datetime,
Expense_Name nvarchar(50),
Expense_Amount int,
Memo nvarchar(500)
Constraint PK_HIS_DETAIL_RECORD Primary Key (Record_Date));
Insert Into DETAIL_RECORD (Record_Date, Expense_Name, Expense_Amount, Memo)
Values ('2012/01/01', '花費 1', 10000, '說明 1');
Insert Into DETAIL_RECORD (Record_Date, Expense_Name, Expense_Amount, Memo)
Values ('2012/01/02', '花費 2', 20000, '說明 2');
Insert Into DETAIL_RECORD (Record_Date, Expense_Name, Expense_Amount, Memo)
Values ('2012/01/03', '花費 3', 30000, '說明 3');
Insert Into DETAIL_RECORD (Record_Date, Expense_Name, Expense_Amount, Memo)
Values ('2012/01/04', '花費 4', 40000, '說明 4');
Insert Into DETAIL_RECORD (Record_Date, Expense_Name, Expense_Amount, Memo)
Values ('2012/01/05', '花費 5', 50000, '說明 5');
3) 建立一個供排程作業使用的 Backup.bat DOS Batch 檔案,並將其存放到 C:\Home\Expense 目錄。當被執行時,將呼叫 Backup.sql (詳見下步驟) 來生成一個名為 Jobs.sql 的臨時檔 (內含備份指令),再以 sqlcmd 執行此一臨時檔來完成備份工作。當然也可用 Stored Procedure 來達到相同的效果,這裡只是介紹另一種開發方法供各位參考。
@echo off
rem C:\Home\Expense
rem Expense Table
rem Create Backup Directory ----------
for /f "tokens=1-3 delims=/ " %%a in ('date/t') do (
set year=%%a
set month=%%b
set day=%%c
)
if exist C:\Home\Expense\%year%_%month%_%day% rmdir C:\Home\Expense\%year%_%month%_%day%
mkdir C:\Home\Expense\%year%_%month%_%day%
set backup_path=C:\Home\Expense\%year%_%month%_%day%
rem Create SQL Script File ----------
echo use master; > C:\Home\Expense\Jobs.sql
echo set nocount on >> C:\Home\Expense\Jobs.sql
echo declare @Backup_Path nvarchar(200) >> C:\Home\Expense\Jobs.sql
echo select @Backup_Path = '%backup_path%\' >> C:\Home\Expense\Jobs.sql
type C:\Home\Expense\Backup.sql >> C:\Home\Expense\Jobs.sql
echo set nocount off >> C:\Home\Expense\Jobs.sql
rem Execute Generated SQL Script File ----------
sqlcmd -S localhost\SQLEXPRESS -E -d master -i C:\Home\Expense\Jobs.sql
if exist C:\Home\Expense\Jobs.sql del C:\Home\Expense\Jobs.sql
4) 撰寫 Backup.sql Scripts 檔案,並將其存放到 C:\Home\Expense 目錄。該檔案內容如下:
-- Backup.bat will generate the following two commented lines.
-- declare @Backup_Path nvarchar(200)
-- select @Backup_Path = 'C:\Home\Expense\Backup\2012_01_01\'
declare @SQL_String nvarchar(2000)
-- Backup Command Format --------------------------------
-- BACKUP DATABASE Expense TO
-- DISK = N'C:\Home\Expense\2012_01_01\Expense.BAK'
-- WITH NOFORMAT, INIT, NAME = N'Expense Backup',
-- SKIP, NOUNLOAD, STATS = 10
---------------------------------------------------------
select @SQL_String = 'BACKUP DATABASE Expense TO ' +
' DISK = N' + '''' + @Backup_Path + 'Expense.BAK' + '''' +
' WITH NOFORMAT, INIT, NAME = N' + '''' + 'Expense Backup' + '''' + ', ' +
' SKIP, NOUNLOAD, STATS = 10 '
exec (@SQL_String)
5) 設定工作排程器在每個月 1 號下午 01:00:00 執行備份 :(螢幕左下方) 開始 --> 所有程式 --> 附屬應用程式 --> 系統工具 --> 工作排程器
(1). 於 "工作排程器" 視窗中,highlight 畫面左方的 "工作排程器程式庫"後,按一下滑鼠右鍵,選取 "建立工作"。
(2). 此時將出現 "建立工作" 視窗 (目前位於 "一般" 頁籤)。
(3). 在 "名稱" 欄位輸入 DB Backup,勾選 "只有使用者登入時才執行"、"以最高權限執行" 欄位後,點選上方 "觸發程序" 頁籤繼續設定。
(4). 於 "觸發程序" 頁籤點選 "新增",出現 "新增觸發程序" 視窗 --
- 選擇 "每月"。
- "開始" 欄位,選取 2012/4/1 下午 01:00:00 。
- "月份" 欄位,選取 "選取每個月"。
- "日期" 欄位,選取 "1"。
- 按下 "確定" 功能鍵後,點選上方 "動作" 頁籤繼續設定。
- "執行" 欄位,選取 "啟動程式"。
- 按下 "瀏覽",於出現的視窗中,選擇 C:\Home\Expense\Backup.BAT,按 "開啟舊檔"。
- 按下 "確定" 功能鍵後,再按一次 "確定"。