使用日志备份还原到故障点 将 SQL Server 数据库还原到某个时点(完整恢复模式)

SQL Server(所有支持的版本)

SQL Server 数据库有关。

 重要

必须将数据库恢复到事务日志备份的结尾。

开始之前

建议

  • 使用 STANDBY 查找未知的时间点。

  • 在还原顺序中尽早指定时间点

Security

权限

如果数据库存在,则 RESTORE 权限默认授予 sysadmin 和 dbcreator 固定服务器角色成员以及数据库的所有者 (dbo)(对于 FROM DATABASE_SNAPSHOT 选项,数据库始终存在)。

因为只有在固定数据库可以访问且没有损坏时(在执行 RESTORE 时并不会总是这样)才能检查固定数据库角色成员身份,所以 db_owner 固定数据库角色成员没有 RESTORE 权限。

使用 SQL Server Management Studio

将数据库还原到时间点

  1. SQL Server 数据库引擎实例,然后展开服务器树。

  2. 根据具体的数据库,选择一个用户数据库,或展开“系统数据库”并选择一个系统数据库。

  3. 右键单击数据库,指向“任务” ,再指向“还原” ,然后单击“数据库” 。

  4. 选择以下选项之一:

    • Database

      此列表仅包含已根据 msdb 备份历史记录进行备份的数据库。

     备注

    这种情况下,请选择 “设备” 以手动指定要还原的文件或设备。

    • 设备

      若要为 “备份介质” 框选择一个或多个设备,请单击 “添加” 。

      将所需设备添加到 “备份介质” 列表框后,单击 “确定” 返回到 “常规” 页。

      在 “源: 设备: 数据库” 列表框中,选择应还原的数据库名称。

      只有在所选设备上具有备份的数据库才可用。

  5. 若要更改数据库名称,请在 “数据库” 框中输入新名称。

  6. 单击 “时间线” 以访问 “备份时间线” 对话框。

  7. 在 “还原到” 部分中,单击 “具体日期和时间” 。

  8. 单击“确定”。

     备注

    使用“时间线间隔” 框更改时间线上显示的时间量。

  9. 应当仅使用选定的备份进行时点还原操作。

    还原和恢复概述 (SQL Server)。

  10. 在 “选项” 页的 “还原选项” 面板中,可以根据您的实际情况选择下列任意选项:

    • 覆盖现有数据库(WITH REPLACE)

    • 保留复制设置(WITH KEEP_REPLICATION)

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

    还原数据库(“选项”页)。

  11. 此框确定还原操作之后的数据库状态。

    • 如果您要立即还原所有必要的备份,则选择此选项。

    • 除非恢复数据库,否则无法使用数据库。

    • 它撤消未提交的事务,但将撤消操作保存在备用文件中,以便能够还原恢复结果。

    还原数据库(“选项”页)。

  12. 无需修改此设置,但可以选择备份日志尾部(即使不需要)。

  13. 此复选框可在执行还原操作之前将数据库设置为单用户模式,并在该操作完成后将数据库设置为多用户模式。

  14. 除非数据库过大并且您要监视还原操作的状态,否则通常没有必要选中该选项。

使用 Transact-SQL

开始之前

只要您之后还原每个随后日志备份(到达和包括包含目标时间点的日志备份),该完整数据库备份就可以早于最近的完整数据库备份。

始终会还原完整数据备份,即使该数据备份包含目标时间也同样如此。

Transact-SQL 语法

RESTORE LOG database_name FROM <backup_device> WITH STOPAT time, RECOVERY… =

恢复点是在 time 指定的 datetime值或之前发生的最新的事务提交。

这样确保了不会超出目标时间。

将数据库还原到时间点

 备注

示例 (Transact-SQL)。

  1. 连接到您要还原数据库的服务器实例。

  2. 执行使用 NORECOVERY 选项的 RESTORE DATABASE 语句。

     备注

    如果指定 CONTINUE_AFTER_ERROR,则部分还原顺序将成功,但 FILESTREAM 文件组将不可恢复。

  3. 还原上次差异数据库备份(如果有),而不恢复数据库 (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。

  4. 以创建事务日志备份的相同顺序应用每个事务日志备份,同时指定要停止还原日志的时间 (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT = time , RECOVERY)。

     备注

    如果事务日志备份不包含要求的时间(例如,如果指定的时间超出了事务日志所包含的时间范围),则会生成警告,并且不会恢复数据库。

示例 (Transact-SQL)

在备份设备上,要还原的完整数据库备份 AdventureWorksBackups是设备上的第三个备份集 (FILE = 3),第一个日志备份是第四个备份集 (FILE = 4),第二个日志备份是第五个备份集 (FILE = 5)。

 重要

若要允许日志备份,请在完整备份数据库之前,使用 ALTER DATABASE AdventureWorks SET RECOVERY FULL将数据库设置为使用完整恢复模式。

复制
 
RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO