还原文件和文件组 (SQL Server)

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中还原文件和文件组。

本主题内容

在您开始之前

局限性与限制

  • 进行文件和文件组还原的系统管理员必须是当前唯一在使用该数据库的人。

  • 在显式或隐式事务中不允许使用 RESTORE 命令。

  • 在简单恢复模式下,该文件必须属于只读文件组。

  • 在完整或大容量日志恢复模式下,在还原文件之前,必须备份活动事务日志(称为日志尾部)。 有关详细信息,请参阅备份事务日志(SQL Server)。

  • 若要还原已加密的数据库,必须有权访问用于加密数据库的证书或非对称密钥。 如果没有证书或非对称密钥,则无法还原数据库。 因此,只要需要备份,就必须保留用于加密数据库加密密钥的证书。 有关详细信息,请参阅 SQL Server Certificates and Asymmetric Keys

安全

权限

如果还原的数据库不存在,则用户必须具有 CREATE DATABASE 权限才能执行 RESTORE。 如果数据库存在,则 RESTORE 权限默认授予给sysadmindbcreator固定服务器角色的成员,以及数据库的所有者(dbo)。(对于 FROM DATABASE_SNAPSHOT 选项,数据库始终存在。)

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

使用 SQL Server Management Studio

还原文件和文件组

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

  2. 展开 数据库。 根据数据库,选择用户数据库或展开 系统数据库,然后选择系统数据库。

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

  4. 单击“ 文件和文件组”,打开 “还原文件和文件组 ”对话框。

  5. “常规 ”页上的“ 到数据库 ”列表框中,输入要还原的数据库。 可以输入新数据库,也可以从下拉列表中选择现有数据库。 该列表包括服务器上的所有数据库,不包括系统数据库 mastertempdb

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

    • 从数据库

      在列表框中输入数据库名称。 此列表仅包含已根据 msdb 备份历史记录备份的数据库。

    • 从设备

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

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

  7. 选择要还原的备份集 网格中,选择要还原的备份。 此网格显示可用于指定位置的备份。 默认情况下,建议使用恢复计划。 若要替代建议的恢复计划,可以更改网格中的选择。 依赖于已取消选择备份的任何备份都会自动取消选中。

    列头 价值观
    还原 选中的复选框指示要还原的备份集。
    名称 备份集的名称。
    文件类型 指定备份中的数据类型: 数据日志Filestream 数据。 表中包含的数据位于 数据文件 中。 事务日志数据位于 日志文件 中。 存储在文件系统上的二进制大型对象(BLOB)数据位于 Filestream 数据文件 中。
    类型 执行的备份类型: 完整差异事务日志
    服务器 执行备份作的 Database-Engine 实例的名称。
    文件逻辑名称 文件的逻辑名称。
    数据库 备份作中涉及的数据库的名称。
    开始日期 备份作开始的日期和时间,显示在客户端的区域设置中。
    完成日期 备份作完成的日期和时间,显示在客户端的区域设置中。
    大小 备份集的大小(以字节为单位)。
    用户名 执行备份作的用户的名称。
  8. 若要查看或选择高级选项,请单击“选择页面”窗格中的选项

  9. “还原选项 ”面板中,可以选择以下任一选项(如果适合你的情况)。

    还原为文件组
    指示正在还原整个文件组。

    覆盖现有数据库
    指定还原操作必须覆盖任何现有的数据库及其相关文件,即便存在同名的其他数据库或文件也是如此。

    选择此选项等效于在 Transact-SQL RESTORE 语句中使用 REPLACE 选项。

    在还原每个备份之前进行提示
    要求在还原每个备份集之前进行确认。

    此选项特别有用,因为必须交换不同媒体集的磁带,例如服务器有一个磁带设备时。

    限制对已还原数据库的访问
    使还原的数据库仅适用于 db_ownerdbcreatorsysadmin 的成员。

    选择此选项是 Transact-SQL RESTORE 语句中使用 RESTRICTED_USER 选项的同义词。

  10. (可选)可以通过将 还原数据库文件 中的每个文件的新还原目标指定为网格,将数据库还原到新位置。

    列头 价值观
    原始文件名 源备份文件的完整路径。
    文件类型 指定备份中的数据类型: 数据日志Filestream 数据。 表中包含的数据位于 数据文件 中。 事务日志数据位于 日志文件 中。 存储在文件系统上的二进制大型对象(BLOB)数据位于 Filestream 数据文件 中。
    还原为 要还原的数据库文件的完整路径。 若要指定新的还原文件,请单击文本框并编辑建议的路径和文件名。 在 “还原方式 ”列中更改路径或文件名等效于在 Transact-SQL RESTORE 语句中使用 MOVE 选项。
  11. 恢复状态面板确定还原作后数据库的状态。

    通过回滚未提交的事务,使数据库保持可供使用。 无法还原其他事务日志。 (恢复并复原)
    恢复数据库。 这是默认行为。 仅当立即还原所有必要的备份时,才选择此选项。 此选项等效于在 Transact-SQL RESTORE 语句中指定 WITH RECOVERY。

    使数据库维持非运行状态,并且不要回滚未提交的事务。 可以还原其他事务日志。 (RESTORE WITH NORECOVERY)
    使数据库处于还原状态。 若要恢复数据库,需要使用前面的 RESTORE WITH RECOVERY 选项执行另一个还原(请参阅上文)。 此选项等效于在 Transact-SQL RESTORE 语句中指定 WITH NORECOVERY。

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

    使数据库保持只读模式。 回滚未提交的事务,并将回滚操作保存到文件中,以便能够撤销恢复效果。 (通过备用模式恢复)
    使数据库处于备用状态。 此选项等效于在 Transact-SQL RESTORE 语句中指定 WITH STANDBY。

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

    回滚撤消文件
    “回滚撤消文件 ”文本框中指定备用文件名。 如果将数据库保留为只读模式(RESTORE WITH STANDBY),则需要此选项。

使用 Transact-SQL

还原文件和文件组

  1. 执行 RESTORE DATABASE 语句以还原文件和文件组备份,并指定:

    • 要还原的数据库的名称。

    • 用于还原完整数据库备份的备份设备。

    • 要还原的每个文件的 FILE 子句。

    • 要还原的每个文件组的 FILEGROUP 子句。

    • NORECOVERY 子句。 如果在创建备份后尚未修改文件,请指定 RECOVERY 选项。

  2. 如果在创建文件备份后修改了文件,请执行 RESTORE LOG 语句以应用事务日志备份,并指定:

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

    • 从中还原事务日志备份的备份设备。

    • 如果在当前事务日志备份之后还有其他事务日志备份需要应用,请使用 NORECOVERY 子句;否则,请指定 RECOVERY 子句。

      如果已应用,事务日志备份必须涵盖在日志结束时备份文件和文件组的时间(除非还原所有数据库文件)。

示例 (Transact-SQL)

此示例还原数据库的文件和文件组 MyDatabase 。 若要将数据库还原到当前时间,将应用两个事务日志。

USE master;  
GO  
-- Restore the files and filesgroups for MyDatabase.  
RESTORE DATABASE MyDatabase  
   FILE = 'MyDatabase_data_1',  
   FILEGROUP = 'new_customers',  
   FILE = 'MyDatabase_data_2',  
   FILEGROUP = 'first_qtr_sales'  
   FROM MyDatabase_1  
   WITH NORECOVERY;  
GO  
-- Apply the first transaction log backup.  
RESTORE LOG MyDatabase  
   FROM MyDatabase_log1  
   WITH NORECOVERY;  
GO  
-- Apply the last transaction log backup.  
RESTORE LOG MyDatabase  
   FROM MyDatabase_log2  
   WITH RECOVERY;  
GO  

另请参阅

还原数据库备份 (SQL Server Management Studio)
备份文件和文件组 (SQL Server)
创建完整数据库备份 (SQL Server)
备份事务日志 (SQL Server)
还原事务日志备份 (SQL Server)
RESTORE (Transact-SQL)