`

让SQL自动备份并压缩

阅读更多

关于SQL自动备份的方法在本Blog中有些过相关的文章

可以参看:http://fableking.iteye.com/blog/361021

这里就讲如何让产生后的备份文件自动压缩并删除源文件的方法

其实这里利用的是winrar的命令行来执行压缩并删除源文件的方法的

winrar命令行的压缩命令是[winrar路径] a [参数] [压缩后的路径] [需要压缩的文件路径],这是本文需要用到的命令格式

之后我们就要解决如何让SQL来执行这个命令行了

方法就是调用SQL的exec master..xp_cmdshell @cmd的存储过程方法来执行,这样我们就能够实现我们的目的了

大概方向已经取得,之后就是按实际要求来操作它们了,这里我只讲我的使用方法,具体的还是要看大家的具体需要的

我的SQL备份是每天都要执行的,所以我在设置自动备份的时候就是把备份文件名设置成当天日期的格式的

这是备份的命令:
declare @filename varchar(100)
set @filename='D:\'+convert(char(10),getdate(),120)  --设置备份文件的路径和文件名
print @filename
backup database[databasename] to disk=@filename with NOINIT,NOUNLOAD,NAME='backup',NOSKIP,STATS=10,NOFORMAT  --执行备份

这是压缩并删除源文件的命令:
declare @file varchar(100)
set @file='c:\winrar.exe a -ep -df D:\'+convert(char(10),getdate(),120)+'.rar D:\'+convert(char(10),getdate(),120--将压缩备份文件并删除源文件的winrar命令行命令
exec master..xp_cmdshell @file  --执行命令

这里解释下压缩的命令,关于备份的命令因为之前的文章说明过,这里就不作多余的解释了

这里我本来是想把@file的命令直接写在exec master..xp_cmdshell @cmd的@cmd位置的,但之后发现这里不支持使用"+"号,一下子有点郁闷,幸好后来使用变量解决了该问题。。所以这里使用了@file的变量,不这样的话,命令就无法如意执行了。
'c:\winrar.exe a -ep -df D:\'+convert(char(10),getdate(),120)+'.rar D:\'+convert(char(10),getdate(),120)
解释下这句话的具体意思:
一般默认下winrar的程序都是安装在C:\Program Files\WinRAR下的,但是由于其中的Program Files目录名中有空格,CMD命令行中是不支持有空格的名字的,所以只好把程序复制到一个简单的路径,然后加以调用了。
本来想过使用环境变量添加path来用的,结果这个方法在cmd中可行,放在sql中调用就不行,没办法,暂时就只好重新定义winrar的路径来解决问题了。
a就是winrar压缩文件的命令参数
-ep参数的作用是不压缩文件的完整路径,也就是指压缩指定的文件。
-df参数的作用就是压缩后删除源文件
后面命令的意思就是把D盘根目录下以当天日期命名的备份文件压缩到D盘根目录,并命名为当天日期的rar文件
更多的winrar参数命令可以参考winrar的帮助文档。

-------------------------------------------------------------------------

差不多就是这样了,这个问题我花了差不多一个上午的时间来研究,当中还碰到了sql权限的问题,所以这里还要特别说一下,新建这个作业的用户必须是拥有对master数据库有读写权限的用户,不然是不能执行xp_cmdshell的存储过程的。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics