sql server 用DOS 批处理 自动 定期删除 备份文件 包括完整备份和差异备份

系统创建了自动备份后,需要经常清理旧的备份以释放硬盘空间.

--创建自动删除备份文件过程,用个作业调度就省事了.

set nocount on
declare @str varchar(100),
        @dir varchar(100),
@date varchar(10),
@Old int,
@cmdstr varchar(5000)


select @old=20,
  @cmdstr=''
set @dir='D:\databak\'


 exec xp_cmdshell 'del d:\databak\clear.bat'
while(@old>15) --保留天数
begin


set  @date=replace(convert(varchar(10),getdate()-@old,120),'-','')
--删除完整备份
set @str='del '+@dir+@date+'FULLBAK\'+'*.bak' 
set @cmdstr='echo ' +@str+' >>d:\databak\clear.bat'
exec xp_cmdshell @cmdstr


set @str='RD '+@dir+@date+'FULLBAK' 
set @cmdstr='echo ' +@str+' >>d:\databak\clear.bat'
exec xp_cmdshell @cmdstr


set @cmdstr=@cmdstr+@str
--删除差异备份
set @str='del '+@dir+@date+'DIFF\'+'*.bak' 
set @cmdstr='echo ' +@str+' >>d:\databak\clear.bat'
exec xp_cmdshell @cmdstr


set @str='RD '+@dir+@date+'DIFF' 
set @cmdstr='echo ' +@str+' >>d:\databak\clear.bat'
exec xp_cmdshell @cmdstr


set @old=@old-1
end
--执行清理
 exec xp_cmdshell 'd:\databak\clear.bat'

---附常用清理.

DECLARE @DeleteBeforeDate DateTime
SELECT @DeleteBeforeDate = DATEADD(d,-30, GETDATE()) --一个月前的
EXEC msdb..sysmail_delete_mailitems_sp @sent_before = @DeleteBeforeDate --删除邮件记录
EXEC msdb..sysmail_delete_log_sp @logged_before = @DeleteBeforeDate  --删除邮件日志
exec msdb..sp_delete_backuphistory @oldest_date=@DeleteBeforeDate  --删除备份日志

 


 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leecyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值