还原事务日志备份 (SQL Server)

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中还原事务日志备份。

本主题内容

在您开始之前

先决条件

  • 备份必须按照创建备份的顺序进行还原。 在还原特定事务日志备份之前,必须先还原下面列出的之前的备份,并且不要回滚未提交的事务,即使用 WITH NORECOVERY:

    • 在特定的事务日志备份之前,应进行完整数据库备份和上次差异备份(如果有)。 在创建最新的完整或差异数据库备份之前,数据库必须使用完整恢复模式或大容量日志恢复模式。

    • 在完整数据库备份或差异备份(如果您还原一个)之后以及特定事务日志备份之前执行的所有事务日志备份。 日志备份必须在创建日志备份的顺序中应用,且日志链中没有任何间隙。

      有关事务日志备份的详细信息,请参阅事务日志备份(SQL Server)应用事务日志备份(SQL Server)。

安全

权限

RESTORE 权限被授予那些成员信息始终可供服务器轻松获取的角色。 由于仅当数据库可访问且未损坏时,才能检查固定数据库角色成员身份,因此执行 RESTORE 时并不总是如此, 因此db_owner 固定数据库角色的成员没有 RESTORE 权限。

使用 SQL Server Management Studio

警告

还原的正常过程是选择“ 还原数据库 ”对话框中的日志备份以及数据和差异备份。

还原事务日志备份

  1. 连接到 Microsoft SQL Server 数据库引擎的相应实例后,在对象资源管理器中,单击服务器名称以展开服务器树。

  2. 展开 “数据库”,然后根据数据库的不同,选择用户数据库,或展开 “系统数据库” ,再选择系统数据库。

  3. 右键单击数据库,指向任务,指向还原,然后单击事务日志,这将打开还原事务日志对话框。

    注释

    如果 事务日志 显示为灰色,可能需要首先还原完整备份或差异备份。 使用 “数据库 备份”对话框。

  4. 在“ 常规 ”页上的“ 数据库 ”列表框中,选择数据库的名称。 仅列出处于还原状态的数据库。

  5. 若要指定要还原的备份集的源和位置,请单击以下选项之一:

    • 从以前的数据库备份

      从下拉列表中选择要还原的数据库。 该列表仅包含已根据 msdb 备份历史记录备份的数据库。

    • 从文件或磁带

      单击“浏览”按钮打开 “选择备份设备 ”对话框。 在 “备份媒体类型 ”框中,选择列出的设备类型之一。 若要为 备份媒体 框选择一个或多个设备,请单击“ 添加”。

      将想要的设备添加到 “备份媒体 ”列表框后,单击“ 确定 ”返回到 “常规 ”页。

  6. “选择要还原的事务日志备份 ”网格中,选择要还原的备份。 此网格列出可用于所选数据库的事务日志备份。 仅当其 第一个 LSN 大于数据库 的最后 LSN 时,日志备份才可用。 日志备份按日志序列号(LSN)的顺序列出,并且必须按此顺序还原这些备份。

    下表列出了网格的列标题并描述其值。

    标题 价值
    还原 选中的复选框指示要还原的备份集。
    名称 备份集的名称。
    组件 备份组件: 数据库文件或 <空白> (对于事务日志)。
    数据库 备份作中涉及的数据库的名称。
    开始日期 备份作开始的日期和时间,显示在客户端的区域设置中。
    完成日期 备份作完成的日期和时间,显示在客户端的区域设置中。
    First LSN 备份集中第一个事务的日志序列号。 用于文件备份的空白处。
    最后一个 LSN 备份集中最后一次事务的日志序列号。 文件备份的空白。
    检查点 LSN 创建备份时的最新检查点的日志序列号。
    完整 LSN 最新完整数据库备份的日志序列号。
    服务器 执行备份作的数据库引擎实例的名称。
    用户名 执行备份作的用户的名称。
    大小 备份集的大小(以字节为单位)。
    位置 备份集在卷中的位置。
    过期日期 备份集过期的日期和时间。
  7. 选择以下项之一:

    • 时间点

      保留默认值(最近可能)或通过单击“浏览”按钮选择一个具体的日期和时间,这将打开“时间点还原”对话框。

    • 标记的交易

      将数据库还原到以前标记的事务。 选择此选项将启动 “选择标记事务 ”对话框,其中显示一个网格,其中列出了所选事务日志备份中可用的标记事务。

      默认情况下,还原最多,但不包括已标记的事务。 若要同时恢复标记的事务,请选择“包含标记的事务”。

      下表列出了网格的列标题并描述其值。

      标题 价值
      <留空> 显示用于选择标记的复选框。
      事务标记 提交事务时由用户指定的已标记事务的名称。
      日期 事务提交时的日期和时间戳。 事务日期和时间显示为 msdbgmarkhistory 表中的记录,而不是客户端计算机的日期和时间。
      说明 提交事务时由用户指定的标记事务的说明(如果有)。
      LSN 标记事务的日志序列号。
      数据库 已提交标记事务的数据库的名称。
      用户名 提交标记事务的数据库用户的名称。
  8. 若要查看或选择高级选项,请单击“选择页面”窗格中的选项

  9. “还原选项” 部分中,选项包括:

    • 保留复制设置(WITH KEEP_REPLICATION)

      将已发布的数据库还原到创建数据库的服务器以外的服务器时,保留复制设置。

      此选项仅适用于保留数据库可供使用的方法是回滚未提交的事务...选项(稍后会描述),这相当于通过RECOVERY选项还原备份。

      选中此选项等效于使用 KEEP_REPLICATION Transact-SQLRESTORE 语句中的选项。

    • 在还原每个备份之前进行提示

      在还原每个备份集之前(在第一个备份集之后),此选项会显示“ 继续还原 ”对话框,该对话框要求你指示是否要继续还原顺序。 此对话框显示下一个媒体集(如果可用)、备份集名称和备份集说明。

      当必须为不同的媒体集交换磁带时,此选项特别有用。 例如,当服务器只有一个磁带设备时,可以使用它。 等到准备好继续,再单击 “确定”。

      单击 “否” 使数据库处于还原状态。 为方便起见,可以在最后一次还原完成后继续还原顺序。 如果下一个备份是数据或差异备份,请再次使用 还原数据库 任务。 如果下一个备份是日志备份,请使用 还原事务日志 任务。

    • 限制对已还原数据库的访问(WITH RESTRICTED_USER)

      使还原的数据库仅适用于 db_ownerdbcreatorsysadmin 的成员。

      选中此选项相当于在 Transact-SQLRESTORE 语句中使用RESTRICTED_USER 选项。

  10. 对于 恢复状态 选项,请在还原作后指定数据库的状态。

    • 通过回滚未提交的事务,使数据库准备好可供使用。 无法还原其他事务日志。 (恢复并复原)

      恢复数据库。 此选项等效于 RECOVERY Transact-SQLRESTORE 语句中的选项。

      仅当没有要还原的日志文件时,才选择此选项。

    • 保持数据库非操作状态,并且不回滚未提交的事务。 可以还原其他事务日志。 (RESTORE WITH NORECOVERY)

      使数据库处于未恢复 RESTORING 状态。 此选项等效于使用 NORECOVERY 选项在 Transact-SQLRESTORE 语句中。

      选择此选项时, “保留复制设置” 选项不可用。

      重要

      对于镜像数据库或辅助数据库,请始终选择此选项。

    • 使数据库保持只读模式。 撤消未提交的事务,但在文件中保存撤消作,以便可以撤消恢复效果。 (通过备用模式恢复)

      使数据库处于备用状态。 此选项等效于在 Transact-SQLRESTORE 语句中使用 STANDBY 选项。

      选择此选项需要指定备用文件。

  11. (可选)在 备用文件 文本框中指定备用文件名。 如果将数据库保留为只读模式,则需要此选项。 可以在文本框中浏览备用文件或键入其路径名称。

使用 Transact-SQL

重要

建议始终在每个 RESTORE 语句中显式指定 WITH NORECOVERY 或 WITH RECOVERY,以消除歧义。 编写脚本时,这一点尤其重要。

还原事务日志备份

  1. 执行 RESTORE LOG 语句以应用事务日志备份,并指定:

    • 用于应用事务日志的数据库名称。

    • 用于从中恢复事务日志备份的备份设备。

    • NORECOVERY 子句。

    此语句的基本语法如下所示:

    使用 NORECOVERY 从<backup_device还原日志database_name>。

    其中 database_name 是数据库的名称, <backup_device>是包含要还原的日志备份的设备的名称。

  2. 对必须应用的每个事务日志备份重复步骤 1。

  3. 还原还原顺序中的最后一个备份后,若要恢复数据库,请使用以下语句之一:

    • 在最后一个 RESTORE LOG 语句中恢复数据库:

      RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY;  
      GO  
      
    • 等待使用单独的 RESTORE DATABASE 语句恢复数据库:

      RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY;   
      RESTORE DATABASE <database_name> WITH RECOVERY;  
      GO  
      

      等待恢复数据库可让你有机会验证是否已还原所有必要的日志备份。 在执行时间点还原时,通常建议采用此方法。

    重要

    如果要创建镜像数据库,请省略恢复步骤。 镜像数据库必须保持在还原状态。

示例 (Transact-SQL)

默认情况下, AdventureWorks2012 数据库使用简单的恢复模式。 以下示例要求修改数据库以使用完整恢复模式,如下所示:

ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;  

答: 应用单个事务日志备份

以下示例首先利用一个名为 AdventureWorks2012_1 的备份设备上的完整数据库备份来还原 AdventureWorks2012 数据库。 然后,该示例应用驻留在备份设备AdventureWorks2012_log上的第一个事务日志备份。 最后,该示例恢复数据库。

RESTORE DATABASE AdventureWorks2012  
   FROM AdventureWorks2012_1  
   WITH NORECOVERY;  
GO  
RESTORE LOG AdventureWorks2012  
   FROM AdventureWorks2012_log  
   WITH FILE = 1,  
   WITH NORECOVERY;  
GO  
RESTORE DATABASE AdventureWorks2012  
   WITH RECOVERY;  
GO  

B. 应用多个事务日志备份

以下示例首先通过使用位于名为 AdventureWorks2012_1 的备份设备上的完整数据库备份来还原 AdventureWorks2012 数据库。 然后,该示例逐个应用驻留在名为 AdventureWorks2012_log 的备份设备上的前三个事务日志备份。 最后,该示例恢复数据库。

RESTORE DATABASE AdventureWorks2012  
   FROM AdventureWorks2012_1  
   WITH NORECOVERY;  
GO  
RESTORE LOG AdventureWorks2012  
   FROM AdventureWorks2012_log  
   WITH FILE = 1,  
   NORECOVERY;  
GO  
RESTORE LOG AdventureWorks2012  
   FROM AdventureWorks2012_log  
   WITH FILE = 2,  
   WITH NORECOVERY;  
GO  
RESTORE LOG AdventureWorks2012  
   FROM AdventureWorks2012_log  
   WITH FILE = 3,  
   WITH NORECOVERY;  
GO  
RESTORE DATABASE AdventureWorks2012  
   WITH RECOVERY;  
GO  

相关任务

另请参阅

RESTORE (Transact-SQL)
应用事务日志备份 (SQL Server)