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

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

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

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

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

编辑:请注意,我的案例涉及使用 SQL Server Agent 备份数据库以及在此过程中数据库修改的影响。

答案1

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

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

答案2

您不能直接将其复制过去,因为正如您在问题中提到的那样,数据库在复制过程中可能会发生更改。

它必须通过了解数据库功能的代理来完成,然后通过操作系统功能获取“快照”或可以使用实用程序在安全状态下转储数据库(例如,如果使用 mysql,则为 mysqldump)。

否则,您得到的备份可能会被损坏,而且您只有在恢复它时才会知道。我认为 Joel 和 Jeff 最近在最近的 StackOverflow 播客中谈到了这一点。

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

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

答案3

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

答案4

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

相关内容