我一直在阅读这个,但在线文档有点难以理解,而且看起来很笨拙。例如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
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)
不幸的是,不,那是行不通的。它将继续追加,但会将过期的集保留在同一个存档中。此屏幕截图显示了使用您的脚本的备份存档,设置为RETAINDAYS = 2,在 11 月运行一次(VM 欺骗),今天再次运行。

我认为您所追求的是滚动备份,因此假设这是每周一次,那么在经过一段时间后,它应该保留 7 个旧备份集,删除一个并附加一个新备份集。
就个人而言,我会为每个文件保留一个备份集,并使用维护向导中的清理功能来删除旧文件;或者一个常规的 Windows 计划任务。没有任何真正需要将备份集保存在单个文件中。
| 归档时间: |
|
| 查看次数: |
6027 次 |
| 最近记录: |