实时SQL Server备份期间会发生什么?


18

当我告诉他们我可以在SQL Server数据库仍在运行时对其进行备份时,我的一些同事感到惊讶,并想知道这是怎么可能的。我知道SQL Server可以在仍在线时备份数据库,但是我不确定如何解释它的可能性。我的问题是这对数据库有什么影响?

如果在备份运行时修改了数据(通过插入,更新或删除),那么备份中是否包含这些更改,或者以后将其添加到数据库中?

我假设日志文件在这里起着重要的作用,但是我不确定如何。

编辑:作为一个说明,我的案例涉及在此过程中使用SQL Server Agent备份数据库以及数据库修改的影响。

Answers:


24

完全备份包含数据和日志。对于数据,它只是将数据库的每个页面复制到备份中,就像读取页面时一样。然后,它将所有“相关”日志附加到备份介质中。至少,这包括备份操作开始时的LSN与备份操作结束时的LSN之间的所有日志。实际上,通常会有更多的日志,因为它必须在备份开始时包括所有活动事务以及复制所需的日志。请参阅揭穿有关完整数据库备份的两个神话

还原数据库后,所有数据页都被复制到数据库文件中,然后所有日志页都被复制到日志文件中。此刻数据库不一致,因为它包含的数据页面图像可能彼此不同步。但是现在可以正常恢复了。由于日志包含备份期间的所有日志,因此在恢复结束时,数据库是一致的。


1
很棒的帖子和链接帮助提供了一个很好的例子。谢谢。
肖恩·霍亚特

非常简洁。做得好!
allen1 2015年

2

在备份期间,将为数据库创建快照,并从该快照读取数据以进行备份。实际的实时数据库操作不会影响备份操作。


1

您不能只复制它,因为您在问题中提到的数据库中间副本可能会有变更。

它必须由了解数据库功能的代理来完成,然后通过OS功能进行“快照”,或者可以使用实用程序以安全状态转储数据库(如mysqldump,如果使用mysql)。

否则,您将获得一个可能已损坏的备份,并且只有还原后才能知道。我认为Joel和Jeff最近在最近的StackOverflow播客中谈到了这一点。

您说对了,日志文件很重要。如果日志/日志文件与实际数据不同步,则还原文件将导致损坏。

它可以归结为使用数据库安全状态通过数据库感知的代理或快照应用程序或知道如何正确地将数据库挂接到丢弃数据中的应用程序而知道的备份,而不会干扰数据转储期间的更新,然后再备份生成的文件。


这是一个更笼统的答案,但我忘了说起初我是通过SQL Server Agent工作的。尽管采用了这种方法,但它仍然提供了一些很好的细节,说明在此过程中可能发生了什么,所以无论如何它还是有帮助的!谢谢。
肖恩·霍亚特

0

有很多方法可以做到这一点(通常来说,不知道MSSQL的正常运行方式),例如简单地将数据库转储到文件,而将任何更改附加到完成转储后提交的日志文件之后-利用特定于文件系统的快照Windows上的VSS等功能。


从头开始基于MVCC的数据库(例如PostGres)也可以利用该组行为来维护备份所复制的快照,同时仍然允许备份运行期间开始的事务更新数据文件。正如您所说的,有几种方法,一种方法取决于数据存储引擎的核心设计和事务处理功能。
David Spillett

-1

您可以进行所谓的仅复制备份。在线时不会影响数据库


什么是仅复制备份?如何执行?有什么需要注意的注意事项吗?与此类野兽正在运行的例子有任何联系吗?如果您要提交答案,请想象一下,如果有人在2-3年内遇到此问题,可能会有所帮助。
rnxrx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.