作为程序员或者数据库维护人员,可能大家经常 要做的事情就是备份数据库,并且为了安全起见最好是异地备份,但是如果要经常备份,然后把他们传到本地,是一件非常费时费力的事情,尤其像我这种比较懒的程序员,甚至有时候会忘记备份 ^_^ ,所以比较好的解决办法就是让 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地址]


[数据库备份压缩目录FTP登录用户名]


[数据库备份压缩目录FTP登录密码]


verbose off


lcd [本地保存路径]


prompt off


mget *.rar


bye



5、 然后建立一个autoftp.bat的批处理文件,执行ftp命令。


ftp -s:c:/ftp.txt


6、 在控件面板的任务计划管理中,添加批处理文件的定时自动运行时间,并注意要与服务器数据库备份时间相衔接。



这样,调试成功以后,整个过程就大功告成了,以后就不用去经常去做这些繁琐的事情啦!