由於SQL Server Express作為微軟發布的免費版本,所以功能上和正式版相比有所缺少。自動備份數據庫需要SQL Server Agent服務,但是express版則沒有該服務,所以我們只能自己用其他的方法來執行自動備份。
PS:
- SQL Server Agent 主要包括以下幾個組件:作業、警報、操作。
- 本文主要演示的系統為WIN7和Windows Server 2008,2003和XP沒試過,應該也差不多,2012系統差別就更加不大了。
- 另外可以參考MSDN官方的資料:如何安排和自動 SQL Server 速成版的 SQL Server 數據庫的備份
要實現SQL Server Express自動備份數據庫有兩種方式:
一種是自己編寫WindowsService服務程序,然后調用數據庫中的備份存儲過程
還有一種是使用系統自帶的任務計划程序。
本文主要詳細講述使用WIN7/08系統的任務計划程序來實現自動備份數據庫功能,這也是本人推薦的方法,除非有條件自己編寫一個服務程序或者本身項目中就有服務程序,這倒是可以考慮使用服務程序來實現。
實現EXPRESS速成版自動備份的具體步驟:
步驟一:
首先我們要先編寫好備份數據庫的存儲過程,這樣可以極大方便我們進行自動備份操作,具體可以參考微軟MSDN資料:BACKUP語法。
這里先展示我自己的數據庫備份存儲過程,備份的數據庫是InformationManagementSystem,備份文件存放位置是E:\Database\Backup,示例:
CREATE PROCEDURE [dbo].[proc_FluBackupDatabase] @backupLocation NVARCHAR(255) AS BEGIN SET NOCOUNT ON; DECLARE @name NVARCHAR(128); DECLARE @curdate NVARCHAR(8) SET @curdate=CONVERT(nvarchar(100), GETDATE(), 112); SET @name='InformationManagementSystem_Full_Backup_' + @curdate; SET @backupLocation=@backupLocation+N'InformationManagementSystem_full_'+@curdate+ N'.bak'; BACKUP DATABASE opsdata TO DISK = @backupLocation WITH FORMAT ,NAME = @name; --FORMAT完全新建/覆蓋一個文件 NOFORMAT 將把備份追加到同一個文件中,還原的時候可以選擇不同備份的時間點還原 /*差異備份*/ --BACKUP DATABASE [TestBackup] TO DISK = N'E:\Database\Backup\TestBackupDB-diff2.bak' WITH DIFFERENTIAL , --NAME = N'InformationManagementSystem-Differential Database Backup' END GO
這里我們可以運行下存儲過程測試下,直接在SQL SERVER EXPRESS中新建查詢然后運行語句:
EXEC proc_FluBackupDatabase @backupLocation='E:\Database\Backup\'
步驟二:
這里我們要編寫一個批處理文件,主要是讓系統自動執行這個批處理文件,而批處理文件的語句則調用了sqlcmd命令來運行數據庫備份的存儲過程。
假設我們的批處理文件放在"F:\Database\Backup",我們先右鍵新建一個文本文件,將下面的執行語句復制到文本中並保存(這里一定要注意大小寫,sqlcmd命令是區分大小寫的):
@echo off
::定義備份文件存放目錄 set folder=E:\Database\Backup\ if not exist %folder% md %folder% sqlcmd -S . -E -Q "EXEC opsdata.dbo.proc_FluBackupDatabase @backupLocation='%folder%'"
::測試時避免命令窗口自動關閉一閃而過可以新起一行 輸入 pause
保存成功后將文件后綴改成.bat,比如“DBbackup.bat"。
上述中的sqlcmd命令是執行一個存儲過程,具體可以參考MSDN的資料:sqlcmd 實用工具 ,-S .指定要連接的 SQL Server 實例為本地數據庫,-E表示使用使用信任連接而不用輸入數據庫用戶和密碼,-Q表示在 sqlcmd 啟動時執行查詢,隨后立即退出 sqlcmd,這些命令選項是區分大小寫的,小寫則是其他的命令,這里一定要注意!!!
步驟三:
打開開始菜單=》附件=》系統工具=》任務計划程序 或者直接在系統任務欄搜索 任務計划程序
步驟四:
右鍵任務計划程序,選擇創建任務,如下圖設置相關基礎信息:
這里要注意的是在安全選項的用戶賬號要選擇當前系統賬號,比如上圖標記3中的SYSTEM賬號,之所以要選擇system賬號,是由於如果選擇當前系統的管理員賬號,每次任務計划運行批處理文件的時候,系統都會彈出執行對話框,雖然只是一閃而過,但是還是會對用戶造成不必要的干擾。
還有配置中要選擇符合自己操作系統的配置,比如標記4中選擇的配置是WIN7和08系統。
步驟五:
設置完常規選項后,接下來點擊觸發器,設置任務自動執行的時間,比如下圖中我們設置每天的12點都執行一次自動備份(會自動運行數據庫備份的批處理文件),然后點擊確定。
步驟六:
這里設置我們要執行的操作,選擇啟動程序,然后瀏覽並選擇步驟二中保存在"F:\Database\Backup\Sqlbackup.bat"的批處理文件,以后每天中午12點都會執行這個自動備份腳本。
步驟七:
最后這里設置其他相關選項,這里根據自己的要求進行設置。
到了這里就大功告成,我們通過使用系統的任務計划程序,從而定時執行批處理腳本,實現了SQL Server Express速成版的自動備份數據庫的功能。
續:
以上是進行完整備份的操作,如需增加差異備份可以按上述的操作寫一個腳本,按以上流程在操作一邊。一般完整備份可以每個星期一次,然后每天再做差異備份。
sql如下:
/*差異備份*/
BACKUP DATABASE [TestBackup] TO DISK = N'E:\Database\Backup\TestBackupDB-diff2.bak' WITH DIFFERENTIAL, NAME = N'InformationManagementSystem-Differential Database Backup'