覆盖过期集时追加备份

MrV*_*mes 7 sql-server backup

我一直在阅读这个,但在线文档有点难以理解,而且看起来很笨拙。例如INITNOINIT。有人说它会尝试覆盖所有内容。另一个说无论如何它都会附加。

我想要介于两者之间的东西。我希望过期的媒体集不再存在于文件中,但要让新的备份作业与尚未过期的媒体集一起附加到文件中。

下面的 SQL 会执行所需的备份吗?

BACKUP DATABASE [mydb] 
TO  DISK = N'c:\Backups\mydb.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'mydb-Full Database Backup', NOSKIP, 
NOREWIND, NOUNLOAD,  STATS = 10, RETAINDAYS = 60
GO
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的,并且有一个超过 60 天的备份集,它会从文件中删除吗?

编辑:

为了响应 RichardTheKiwi 的建议,我每次都重写了代码以创建一个新文件。然后我将编写一个 Windows 脚本来删除早于某个日期的文件

declare @filename varchar(max)
set @filename = 'c:\sqlbackups\pptd_' +  replace(replace(convert(varchar, getdate(), 120),':','_'),' ','_') + '.bak'
BACKUP DATABASE [Peter's pointless test database] 
TO  DISK = @filename
WITH FORMAT, INIT,  NAME = N'pptd-Full Database Backup', 
NOREWIND, NOUNLOAD,  STATS = 10
GO
Run Code Online (Sandbox Code Playgroud)

孔夫子*_*孔夫子 5

不幸的是,不,那是行不通的。它将继续追加,但会将过期的集保留在同一个存档中。此屏幕截图显示了使用您的脚本的备份存档,设置为RETAINDAYS = 2,在 11 月运行一次(VM 欺骗),今天再次运行。

在此处输入图片说明

我认为您所追求的是滚动备份,因此假设这是每周一次,那么在经过一段时间后,它应该保留 7 个旧备份集,删除一个并附加一个新备份集。

就个人而言,我会为每个文件保留一个备份集,并使用维护向导中的清理功能来删除旧文件;或者一个常规的 Windows 计划任务。没有任何真正需要将备份集保存在单个文件中。