数据库备份压缩删除小脚本(减少备份文件所占体积)


目的:
1.数据库备份后自动压缩,并在下次备份前删除之前目录的备份文件(实现压缩需要安装 WinRAR.exe
2.有选择地
删除过期的文件(测试用例中是删除7天前不是周一的文件 And 删除35天前是周一的文件

使用方法:
SQL 代理作业 步骤中按计划执行;
可以使用同步工具BTSync.exe http://www.bittorrent.com/sync 工具 把压缩好的文件从服务器同步到自己电脑上面

测试时需要建立文件夹:
D:\Bak\ktvcase\
D:\Bak\ktvcase\RAR

 

Create PROCEDURE [do_backup] AS
declare
@prefix nvarchar(100),
@datefile nvarchar(100),            
@bakfile nvarchar(100),
@rarfile nvarchar(100),
@delcmd nvarchar(100),
@rarcmd nvarchar(150)

BEGIN
-- ktvcase 为数据库名称
set @prefix='D:\Bak\ktvcase\' --备份文件夹路径 需要自己手动建立文件夹 在这个目录下面还需要建立一个文件夹RAR set @datefile=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'
IF(datename(weekday, getdate())='星期一' OR datename(weekday, getdate()) ='Monday') BEGIN SET @rarfile=@prefix+'RAR\'+@datefile+'.zip' END

--先删除旧的备份文件bak set @delcmd = 'del '+@prefix+ '*.bak /f/q' exec master..xp_cmdshell @delcmd --删除7天之前的备份压缩文件rar set @delcmd = ' forfiles /p "D:\Bak\ktvcase\RAR" /s /m *.rar /d -7 /c "cmd /c del @path' exec master..xp_cmdshell @delcmd --删除35天之前的属于周一的备份压缩文件zip set @delcmd = ' forfiles /p "D:\Bak\ktvcase\RAR" /s /m *.zip /d -35 /c "cmd /c del @path' exec master..xp_cmdshell @delcmd BACKUP DataBASE ktvcase TO DISK = @bakfile WITH INIT , NOUNLOAD , NAME = N'ktvcase数据备份', NOSKIP , STATS = 10, NOFORMAT set @rarcmd ='"C:\Program Files (x86)\WinRAR\WinRAR.exe" a -pwuwuwu@@### '+@rarfile+' '+@bakfile --wuwuwu@@###改为您要设置的密码,进行加密压缩 --PRINT @delcmd --PRINT @rarcmd -- exec [do_backup] exec master..xp_cmdshell @rarcmd END

如果提示没有执行脚本的权限,需要执行下面的脚本开启

-- 允许配置高级选项
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--重新配置
RECONFIGURE
GO

 

posted @ 2014-10-08 17:15  maanshancss  阅读(551)  评论(0编辑  收藏  举报