在实时SQL Server备份过程中会发生什么?

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

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

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

编辑:就像一个笔记,我的情况涉及使用SQL Server代理备份数据库和在这个过程中的数据库修改的影响。

完整备份包含数据和日志。 对于数据,它只是将数据库的每个页面复制到备份中, 就像读取页面那样。 然后将所有“相关”日志附加到备份媒体中。 这至less包括备份操作开始时的LSN和备份操作结束时的LSN之间的所有日志。 事实上,通常会有更多的日志,因为它必须在备份和复制所需的日志中包含所有活动事务。 查看关于完整数据库备份的一些神话 。

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

你不能只是复制它,因为你可能会提到数据库中间副本。

必须使用知道数据库function的代理来完成,然后通过操作系统function进行“快照”,或者使用实用程序将数据库转储到安全状态(如mysqldump,如果使用mysql)。

否则,你会得到一个可能被损坏的备份,直到你恢复它才会知道它。 我觉得Joel和Jeff最近在最近的一个StackOverflow播客中谈到了这个问题。

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

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

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

有很多方法可以做到这一点(一般来说,不知道MSSQL是如何正常执行的),比如简单地将数据库转储到文件,而将转储完成后提交的日志文件的任何更改附加到文件系统特定的快照像Windows上的VSSfunction。

您可以采取所谓的只复制备份。 在线时不会影响数据库