作為程式員或者資料庫維護人員,可能大家經常 要做的事情就是備份資料庫,並且為了安全起見最好是異地備份,但是如果要經常備份,然後把他們傳到本地,是一件非常費時費力的事情,尤其像我這種比較懶的程式員,甚至有時候會忘記備份^_^,所以比較好的解決辦法就是讓SQL Server自動備份,同時自動下載。同時由於SQL Server自動備份的bak檔案通常都比較大,如果直接傳到本地,要花比較久的時間,因此為了提高效率最好在備份後先壓縮,並且為了安全起見,下載下來的檔案還要加密。那麼有沒有可能讓SQL自動備份,加密壓縮,自動下載的所有流程都自動完成呢,答案是肯定的。下面我就將我使用到的工具、方法和代碼共用出來,供大家參考。
第一個步驟就是讓SQL Server自動備份資料庫,這方面的文章比較多,最常用的是使用SQL Server的代理,定時執行一個“作業”。基本步驟就是先編寫一個執行備份的預存程序,然後在SQL Server的企業管理器中,選擇“管理——>SQL Server代理——>新增作業”,然後在新增作業步驟中類型選擇Transact-SQL,再在命令中輸入執行備份的預存程序(或者開始不建立預存程序,在這裡直接輸入備份的SQL代碼也可)就可以了。
第二個步驟就是加密並壓縮備份的資料庫檔案。我自己試了一下,一個200M的SQL 備份檔案,用WinRAR壓縮之後的大小是18M左右,所以為了快速傳到本地,壓縮是非常有必要的。為了在備份後,馬上進行壓縮,最方便的就是直接使用SQL命令執行壓縮,由於WinRAR可以通過命令列調用,所以我們可以使用SQL Server中的xp_cmdshell命令來執行壓縮指令,同時通過其中的一些參數指定壓縮密碼,這樣加密壓縮就實現了。(為了實現此功能,伺服器上要安裝WinRAR)
最後還需要定時自動下載。要實現這個功能可以使用windows的任務計劃,再結合系統內建的ftp命令即可實現。
下面給出實現此功能的完整步驟和代碼:
伺服器端:
1、 在要備份的資料庫中建立預存程序:
CREATE PROCEDURE [do_backup] AS
declare
@prefix nvarchar(100),
@datefile nvarchar(100),
@bakfile nvarchar(100),
@rarfile nvarchar(100),
@delcmd nvarchar(100),
@rarcmd nvarchar(150)
set @prefix='E:\Bak\databasename\' --備份檔案夾
set @datefile='fzjs'+cast(Year(GetDate()) as varchar(4))+cast(Month(GetDate()) as varchar(2))+cast(Day(GetDate()) as varchar(2))
set @bakfile=@prefix+@datefile+'.bak'
set @rarfile=@prefix+'RAR\'+@datefile+'.rar'
BACKUP DataBASE databasename2 TO DISK = @bakfile WITH INIT , NOUNLOAD , NAME = N'databasename資料備份', NOSKIP , STATS = 10, NOFORMAT
set @delcmd = 'del '+@prefix+ 'RAR\*.rar' --先清空RAR備份檔案夾
set @rarcmd ='C:\Progra~1\WinRAR\WinRAR.exe a -pyourpw '+@rarfile+' '+@bakfile --將yourpw改為您要設定的密碼,進行加密壓縮
exec master..xp_cmdshell @delcmd
exec master..xp_cmdshell @rarcmd
GO
2、 資料庫管理員——管理——>作業——>新增作業——設定作業的執行程式和已耗用時間,根據自己的備份需要進行設定,然後啟用作業。
3、 在伺服器的FTP中將資料壓縮備份的目錄設定好。
4、 在本地建立一個ftp命令的文字檔:c:\ftp.txt
檔案中輸入以下內容(替換成您自己的內容並去掉[]):
open [您的伺服器IP地址]
[Database Backup壓縮目錄FTP登入使用者名稱]
[Database Backup壓縮目錄FTP登入密碼]
verbose off
lcd [本地儲存路徑]
prompt off
mget *.rar
bye
5、 然後建立一個autoftp.bat的批次檔,執行ftp命令。
ftp -s:c:\ftp.txt
6、 在控制項面板的任務計劃管理中,添加批次檔的定時自動已耗用時間,並注意要與伺服器Database Backup時間相銜接。
這樣,調試成功以後,整個過程就大功告成了,以後就不用去經常去做這些繁瑣的事情啦!