我一直在阅读这个,但是在线文档有点难以理解,而且看起来很笨拙。例如INIT
, NOINIT
。有人说它将尝试覆盖所有内容。另一个说无论如何它都会追加。
我想要介于两者之间的东西。我希望过期的媒体集不再存在于文件中,而是希望新的备份作业与尚未过期的任何集一起附加到文件中。
下面的 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
如果我运行上述程序,并且有一个超过 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
不幸的是,不,那是行不通的。它将继续追加,但会将过期的集合留在同一个存档中。此屏幕截图显示了使用您的脚本的备份存档,设置为
RETAINDAYS = 2
,在 11 月运行一次(VM 诡计),今天再次运行。我认为您所追求的是滚动备份,因此假设这是每周一次,那么在老化期之后,它应该保留 7 个旧备份集,删除一个并附加一个新备份集。
就个人而言,我会为每个文件保留一个备份集,并使用维护向导中的清理功能来删除旧文件;或常规的 Windows 计划任务。没有任何实际需要将备份集保存在单个文件中。