我想创建一个维护计划,执行每周日早上完成的完整备份。周一到周五下班后,我想根据这个完整备份执行差异备份。但是,我不想覆盖前一周的完整备份,而是希望为历史记录/异地保留该完整备份,同时消除与该完整备份相关的差异。我计划创建的计划类型如下:
- 如果需要,可以从周日凌晨开始重建数据库索引。
- 对此的进一步警告是根据存在的碎片量重新组织+更新统计信息。
- 在索引维护之后,在同一天早上创建了一个完整备份。
- 周一到周五晚上,基于完整备份进行差异备份。
- 在差异之后,运行数据库完整性检查。
- 下周日到来,建立完整备份,删除前一周的差异,并将之前的完整备份在本地带到 Drobo 下班后。
这种计划的原因是由于我正在使用的 Azure 环境的 HDD 大小限制。鉴于此,这是一个合理的策略,还是我应该在哪里寻求改进?其次,我如何去保留前一周的完整数据库备份而不是差异?到目前为止,我阅读的文章似乎表明,这种性质的循环备份将同时删除完整备份和差异。
这是 Azure 环境中 Windows Server 2012 VM 上的 SQL Server 2012 实例。有 5 个数据库,每个数据库从 6GB 到 10GB,都会受到此类计划的影响。
感谢你的协助。
正如您所说,您的备份策略可以查看如下:
你可以做的两件重要的事情
WITH COMPRESSION
从上图中,有明显的改进空间。您应该在星期六进行差异备份(以防万一发生灾难)。此外,阅读Backups Gone Bad: The Danger of Differentials也很重要。确保如果您必须在备份策略中间进行完整备份,则使用COPY_ONLY备份。
不要使用维护计划,因为它们有明显的缺点。我强烈推荐使用Ola 的备份解决方案(以及索引维护解决方案)。
编辑:根据您的评论:
如果中间发生完整备份,您的差异将毫无用处,因为基础已更改,您不知道谁进行了最后一次完整备份。差异依赖于最后一次完整备份。如果您知道人们会进行临时完整备份,这会弄乱您的差异,然后拒绝他们的备份权限并创建一个存储过程,该过程将使用 COPY_ONLY 选项进行完整备份,并授予这些人对该 SP 的执行权限。此外,请专注于数据库的恢复模式 - 完整恢复模式必须有日志备份。
您甚至可以查询
msdb.dbo.backupset
where is_copy_only = 0
以找出user_name
正在COPY_ONLY
备份的用户只是为了完整性而添加 -限制用户仅复制日志备份