如何自动保留最近的30个备份文件

时间:2021-09-03 15:27:05
我写了一个SQL备份脚本(backup.sql),用执行该脚本时的日期命名备份的文件名(yyyymmddhhmmss.bak),并在xp的schedule里面添加了一个每天运行一次的任务,该任务运行一个批处理文件(backup.bat),该批处理文件就是用来运行backup.sql的。也就是每天一个备份。

现在的问题是,如果用户没有自己删除旧的备份,那么就会占用越来越多的空间。

我想问的是:
1. 能不能在backup.bat里面加多一个检查功能,只保留最近的30个备份,把其余(bak结尾)的都删掉。
2. 有没有其他方法达到这个目的。

ps: 我的SQL Server是SQL Server 2005 Express

Thanks!

12 个解决方案

#1


up

#2


SQL Server 2000 或者 SQL Server 2005 是有可以保留最近 N 天前的备份,并大于这 N 天前的备份自动删除的功能的。

SQL Server 2005 Express 精简版本没有这个功能,最好选择标准版本或者企业版本。

#3


我知道有这个功能,可惜我们不能用d版的。

#4


up

#5


似乎可以,高手还来,耐心等等吧!

#6


只有自己写schedule在进行判断,一样的可以的

#7


在批处理中写判断吧。记得Windows2003有一个命令Forfiles

如:
Forfiles /D -30 /C "cmd /c echo @fname 是30天前的

自己测试一下吧,2000下可以把2003的Forfiles.exe文件拷过来用。

#8


Forfiles,好东东

另可如下操作:

保留最近30个:
for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i

删除指定日期前的文件,参考:
http://blog.csdn.net/scz123/archive/2006/09/12/1213907.aspx

#9


感谢两位!

#10


发现一个问题,就是把 
for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i 
放到bat文件里面运行时报错: 
i was unexpected at this time. 

what's wrong?

#11


批处理中%i 要改为 %%i

#12


Thanks!

#1


up

#2


SQL Server 2000 或者 SQL Server 2005 是有可以保留最近 N 天前的备份,并大于这 N 天前的备份自动删除的功能的。

SQL Server 2005 Express 精简版本没有这个功能,最好选择标准版本或者企业版本。

#3


我知道有这个功能,可惜我们不能用d版的。

#4


up

#5


似乎可以,高手还来,耐心等等吧!

#6


只有自己写schedule在进行判断,一样的可以的

#7


在批处理中写判断吧。记得Windows2003有一个命令Forfiles

如:
Forfiles /D -30 /C "cmd /c echo @fname 是30天前的

自己测试一下吧,2000下可以把2003的Forfiles.exe文件拷过来用。

#8


Forfiles,好东东

另可如下操作:

保留最近30个:
for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i

删除指定日期前的文件,参考:
http://blog.csdn.net/scz123/archive/2006/09/12/1213907.aspx

#9


感谢两位!

#10


发现一个问题,就是把 
for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i 
放到bat文件里面运行时报错: 
i was unexpected at this time. 

what's wrong?

#11


批处理中%i 要改为 %%i

#12


Thanks!