恢复包含已标记事务的相关数据库

本主题仅与包含已标记事务的数据库以及使用完整或大容量日志恢复模式的数据库相关。

有关还原到特定恢复点的要求的信息,请参阅将 SQL Server 数据库还原到时间点(完整恢复模式)。

SQL Server 支持将命名标记插入事务日志,以允许恢复到该特定标记。 日志标记是针对特定事务的,并且仅在相关事务提交时才插入。 因此,标记可以与特定工作关联,并且您可以恢复到包含或不包含此工作的某个点。

在事务日志中插入命名标记之前,请考虑以下事项:

  • 由于事务标记使用日志空间,因此仅用于在数据库恢复策略中扮演重要角色的事务。

  • 在标记的事务提交后,在 msdblogmarkhistory 表中插入一行。

  • 如果标记的事务跨越同一数据库服务器或不同服务器上的多个数据库,则必须将所有受影响的数据库的日志中记录这些标记。 有关详细信息,请参考使用标记事务来一致地恢复相关数据库(完全恢复模式)。

注释

有关如何标记事务的信息,请参阅使用标记的事务以一致性恢复相关数据库(完全恢复模式)。

用于在事务日志中插入命名标记的 Transact-SQL 语法

若要在事务日志中插入标记,请使用 BEGIN TRANSACTION 语句和 WITH MARK [description] 子句。 标记的名称与事务相同。 可选 说明 是标记的文本说明,而不是标记名称。 例如,在以下 BEGIN TRANSACTION 语句中创建的事务和标记的名称为 Tx1

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'    

事务日志记录标记名称(事务名称)、说明、数据库、用户、 datetime 信息和日志序列号(LSN)。 该 datetime 信息与标记名称一起使用,以唯一标识标记。

有关如何在跨多个数据库的事务中插入标记的信息,请参阅“使用标记的事务以一致方式恢复相关数据库”(完全恢复模式)。

用于恢复到标记的 Transact-SQL 语法

使用RESTORE LOG语句定位标记的事务时,可以使用以下子句中的一个在标记之前或紧接着停止:

  • 使用 WITH STOPATMARK = '<mark_name>' 子句指定标记的事务是恢复点。

    STOPATMARK 向前滚动到标记,并在前滚中包含标记的事务。

  • 使用 WITH STOPBEFOREMARK = '<mark_name>' 子句来指定日志记录的恢复点,该点位于标记的正前方。

    STOPBEFOREMARK 滚动到标记,并且不包括已标记的事务在内。

STOPATMARK 和 STOPBEFOREMARK 选项都支持可选的 AFTER 日期/时间 子句。 使用 日期/时间 时,标记名称不必是唯一的。

如果省略 AFTER 日期/时间 ,则前滚在具有指定名称的第一个标记处停止。 如果指定 AFTER 日期/时间,则前滚在具有指定名称的第一个标记处停止,正好在指定的 日期/时间 或之后。

注释

与所有时间点还原操作一样,在数据库正在执行大容量日志操作时,不允许恢复到标记。

恢复已标记的事务

将数据库还原到标记的事务(SQL Server Management Studio)

RESTORE (Transact-SQL)

准备日志备份

对于此示例,这些相关数据库的相应备份策略如下:

  1. 对两个数据库使用完整恢复模式。

  2. 创建每个数据库的完整备份。

    可以按顺序或同时备份数据库。

  3. 在备份事务日志之前,请标记在所有数据库中执行的事务。 有关如何创建标记的事务的信息,请参阅“使用标记的事务以一致方式恢复相关数据库”(完全恢复模式)。

  4. 备份每个数据库的事务日志。

将数据库恢复至某个已标记的事务

还原备份

  1. 如果可能,请创建未损坏的数据库的 结尾日志备份

  2. 还原每个数据库的最新完整数据库备份。

  3. 确定所有事务日志备份中可用的最新标记事务。 此信息存储在每台服务器上的 msdb 数据库的 logmarkhistory 表中。

  4. 标识包含此标记的所有相关数据库的日志备份。

  5. 还原每个日志备份,在标记的事务处停止。

  6. 恢复每个数据库。

另请参阅

BEGIN TRANSACTION (Transact-SQL)
RESTORE (Transact-SQL)
应用事务日志备份 (SQL Server)
使用标记事务来一致地恢复相关数据库(完全恢复模式)
还原和恢复概述 (SQL Server)
将 SQL Server 数据库还原到时间点(完整恢复模式)
规划和执行还原序列(完整恢复模式)