本文將介紹如何以 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,按 "開啟舊檔"。
- 按下 "確定" 功能鍵後,再按一次 "確定"。