我有一个数据库备份作业设置为使用完全备份和仅复制选项,每天一次。仅副本是打开的,因为从我所读的内容来看,这是备份连接到可用性组的数据库的唯一方法。我在同一个 AG 上使用相同的选项每 20 分钟进行一次日志备份。在这些备份运行后截断事务日志的最佳做法是什么。完整备份不会被截断,因为它只使用与日志备份相同的副本。他们越来越失控。我知道我可以使用 DBCC SHRINKFILE,但我读的越多,它看起来就越危险。还有其他方法或最佳实践吗?
任何建议表示赞赏。
我有一个数据库备份作业设置为使用完全备份和仅复制选项,每天一次。仅副本是打开的,因为从我所读的内容来看,这是备份连接到可用性组的数据库的唯一方法。我在同一个 AG 上使用相同的选项每 20 分钟进行一次日志备份。在这些备份运行后截断事务日志的最佳做法是什么。完整备份不会被截断,因为它只使用与日志备份相同的副本。他们越来越失控。我知道我可以使用 DBCC SHRINKFILE,但我读的越多,它看起来就越危险。还有其他方法或最佳实践吗?
任何建议表示赞赏。
我将是第一个承认文档对此不是很清楚的人。他们声明您应该将备份卸载到辅助服务器,但是虽然大多数声明都是在一般意义上做出的,但我认为它们真正的意思是,特别是日志备份(和
copy_only
备份,如果您有需要的话)。您应该偶尔在主要恕我直言上运行完整备份。该
copy_only
限制是关于完整备份,而不是日志备份,并且仅适用于辅助 AFAIK。您将无法对当前事务日志使用压缩文件,因为它们充满了技术上尚未备份的活动。一旦您
copy_only
在主数据库上进行了完整(非)备份,然后让一个日志备份运行,您应该能够手动收缩日志文件。目前,您的日志备份正在工作,因为数据库设置为完整,但它们仍在继续增长,因为(可能)您从未在主数据库上运行正确的完整备份。这应该是一次性操作,您不应该将它们缩小得太小;您需要将主节点设置为定期备份,并且您需要适应在完整备份或日志备份之间发生的最大活动集。我不会继续讨论如何缩小文件以便它们可以再次增长是徒劳的并且保证性能不佳,但我可以。:-)
由于几个原因,我不太喜欢在辅助副本上进行备份,即您需要将所有内容整合在一起并且存在许可问题。备份通常不会产生很大的开销,因此我倾向于建议在大多数情况下仍然在主副本上进行备份。
正如 Aaron 指出的那样,在正确刷新 t-log 之前,您无法执行诸如缩小 t-log 文件之类的操作。COPY_ONLY 只是一个完整的备份,您仍然需要确保您的 t-log 不会失控。这是我通常更喜欢在主副本上进行备份的另一个原因。
我知道您可以使用 BACKUP LOG 执行 COPY_ONLY,但由于上述原因,我不是一个超级粉丝。
MS 有两篇您可能想阅读的博文。
https://blogs.msdn.microsoft.com/alwaysonpro/2013/09/27/performing-transaction-log-backups-using-alwayson-availability-group-read-only-secondary-replicas-part-1/
https://blogs.msdn.microsoft.com/sql_pfe_blog/2016/10/19/performing-transaction-log-backups-using-alwayson-availability-group-read-only-secondary-replicas-part2/