当我将 Ola Hallengren 的备份脚本部署到我的服务器时,我总是将@CleanupTime
日志备份的参数设置为零。这样,每次运行日志备份作业时,它都会检查比上次完整备份更早的日志备份文件并将其删除。COPY_ONLY
但是,完全备份也是如此!日志备份作业应该只检查最后的非COPY_ONLY
完整备份,以便删除旧的日志备份文件。
只是想知道我是否是唯一遇到此问题的人,或者我的建议是否有意义。如果我需要在中间的一天进行仅完整副本备份以 IDK 刷新 TEST 数据库,则该仅副本备份不应影响常规的每日备份顺序。请让我知道你的想法。
第二部分的第二部分(不得不拆分我的答案)
做得更好
考虑到您的业务定义的 RPO 和 RTO,您现在可能希望将 的参数更改为
@CleanupTime
高于0
. 为什么?因为该值0
只能与内置的故障安全机制一起使用。让我们使用以下时间线:
在某个时间点,您的事务日志备份(和完整备份?)被复制到网络驱动器并通过备份解决方案从那里备份,可能与某种磁带和/或磁盘存储相结合。一旦第一个
BACKUP LOG ...
发生在最后一个之后,BACKUP DATABASE ...
您以前的BACKUP LOG ...
文件就消失了......要问自己的问题
查看上述问题,考虑使用不同的清理时间(例如
@CleanupTime=48
)在数据库服务器的磁盘上保留额外数小时的事务日志备份。好处
COPY_ONLY
备份 ,您的数据仍在磁盘上BACKUP DATABASE ...
COPY_ONLY
备份建立坚实的基础
在任何给定的时间点,某些事情都会失败。您必须确保您可以适应任何故障,并且仍然向利益相关者保证您的解决方案将是 99,.....% 万无一失。
我是怎么做的
使用 Ola 的解决方案绝对是一件轻而易举的事,如果您对如何恢复数据库以及基于您的业务 RPO 和 RTO 提出一两个想法。
我个人的实施是有以下时间表/保留政策:
生产系统
测试系统
测试系统将在生产时间进行备份。这可以是上午 10:00 或下午 14:00(完整备份)和 xx:15(事务日志备份)。
为什么我这样做
...或者我在这些决定背后的想法...
通过将备份时间分配到不同的插槽,我将磁盘 I/O 均匀地分布在存储系统上。在全时 (FULL) 或每季度 (TLOG) 时不会在磁盘上集中大量 I/O。
由于数据库的大小,我区分了 SAP 和非 SAP。
允许测试系统在白天破坏存储。没有高性能影响。
DIFF 和 FULL 备份发生在磁带备份开始之前,并且通常在磁带备份开始之前完成。
即使(磁带)备份解决方案停机一天,保留策略也允许我达到业务制定的 RTO 和 RPO。
即使网络(整体或仅部分)中断一天,备份仍将正常工作并符合 RTO 和 RPO。
你的思考过程
您的
@CleanupTime
设置可能是基于对 Ola 脚本的错误理解。第二部分的第一部分(不得不拆分我的答案)
这里有一两件事需要考虑。在我看来,你可能在思考过程中走捷径。我会在做这个假设时解释......
您可能想快速查看我在此处接受的答案,该答案是在参考问题需要关于备份策略的建议 [关闭]时发布的,以便为您提供有关 RTO 和 RPO 的一些想法。
为什么?因为设置
@CleanupTime=0
可能是个坏主意...首先回答你的问题。
这是 Ola 脚本中的错误吗?-不。Ola 设计了他的脚本来检查最后一次
BACKUP DATABASE...
(完整备份),然后删除BACKUP LOG ...
在该备份之前发生的事务日志备份 ( ),并且仅当备份@CleanupTime
低于发生完整备份时。按设计工作,因为 a
BACKUP DATABASE ... WITH COPY_ONLY...
仍然是Full Backup。安全第一
使用该选项创建备份
BACKUP DATABASE ... COPY_ONLY...
然后创建BACKUP LOG...
仍将允许您使用 FULLCOPY_ONLY
备份和可用的事务日志备份将数据库恢复到一致状态。我使用我的 StackExchange 数据库对此进行了测试:
COPY_ONLY
备份BACKUP LOG ...
使用 Ola 的脚本 执行手动备份
COPY_ONLY
使用 Ola 的脚本备份事务日志
恢复
你可能不会在时间戳的差异是大约。7 分钟。
结果
概括
Ola 的脚本按设计工作。我们已经验证了 a
BACKUP DATABASE ... WITH COPY_ONLY...
和 an AdditionalBACKUP LOG ...
将一起工作。故障安全功能确保您可以使用最后一次完整备份(无论是否为 COPY_ONLY)和可用的事务日志备份来恢复数据库。(更多答案请阅读第二部分第二部分)
你说的对!我认为这是一个错误或设计。我能够回购这个场景。
所以基本上当你用这个运行 Ola 的脚本时:
或本地:
当您执行新的完整备份或完整
copy_only
备份甚至差异备份时,您之前的所有日志备份都将在您运行另一个日志备份后被删除(Ola 的带@CleanupTime = 0
参数的日志备份脚本)。使用 Ola 的脚本版本进行测试:2016 年 10 月 7 日。
基于Ola 的网站:
它没有提到
COPY_ONLY
备份。同时,您可以将日志备份参数更改
@CleanupTime = NULL
为作为解决方法。或者考虑迁移到其他备份工具(例如Minion Backup或dbatools)或滚动您自己的自定义代码,因为 Ola 维护计划的最后一次更新是在 2016 年 10 月 7 日。如果您想提出问题/增强,这里有一个github 。