将数据库还原到新位置(SQL Server)

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 将 SQL Server 数据库还原到新位置,并选择性地重命名 SQL Server 2014 中的数据库。 可以将数据库移动到新的目录路径,也可以在同一服务器实例或其他服务器实例上创建数据库的副本。

本主题内容

在您开始之前

局限性与限制

  • 还原完整数据库备份的系统管理员必须是当前唯一使用要还原的数据库的人员。

先决条件

建议

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

  • 有关移动数据库的其他注意事项,请参阅 使用备份和还原复制数据库

  • 如果将 SQL Server 2005 或更高版本的数据库还原到 SQL Server 2014,则会自动升级数据库。 通常,数据库会立即可用。 但是,如果 SQL Server 2005 数据库具有全文索引,则升级过程会导入、重置或重新生成它们,具体取决于 upgrade_option 服务器属性的设置。 如果将升级选项设置为“导入”(upgrade_option = 2) 或“重新生成”(upgrade_option = 0),在升级过程中将无法使用全文检索。 根据要编制索引的数据量,导入可能需要几个小时,重新生成可能需要长达 10 倍的时间。 另请注意,如果将升级选项设置为“导入”,并且全文目录不可用,则会重新生成关联的全文索引。 若要更改 upgrade_option 服务器属性的设置,请使用 sp_fulltext_service

安全

出于安全考虑,建议不要从未知或不受信任的源附加或还原数据库。 此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。 在从未知或不受信任的源使用数据库之前,请在非生产服务器上对数据库运行 DBCC CHECKDB ,并在数据库中检查代码,例如存储过程或其他用户定义的代码。

权限

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

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

使用 SQL Server Management Studio

将数据库还原到新位置,并选择性地重命名数据库

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

  2. 右键单击 “数据库”,然后单击“ 还原数据库”。 此时会打开 “还原数据库 ”对话框。

  3. 在“ 常规 ”页上,使用 “源 ”部分指定要还原的备份集的源和位置。 选择以下任一选项:

    • 数据库

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

    注释

    如果备份是从其他服务器获取的,则目标服务器将不具有指定数据库的备份历史记录信息。 在这种情况下,请选择 “设备 ”以手动指定要还原的文件或设备。

    1. 设备

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

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

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

      注意 仅当选择 “设备” 时,此列表才可用。 只有所选设备上具有备份的数据库才可用。

  4. “目标 ”部分中, “数据库 ”框会自动填充要还原的数据库的名称。 若要更改数据库的名称,请在 “数据库 ”框中输入新名称。

  5. 在“ 还原到 ”框中,将默认值保留为“上次 备份 ”,或单击“ 时间线 ”以访问“ 备份时间线 ”对话框,以手动选择一个时间点以停止恢复作。 有关指定特定时间点的详细信息,请参阅 备份时间线

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

    有关备份集中要还原网格中的列的信息,请参阅“还原数据库 (常规页)”

  7. 若要指定数据库文件的新位置,请选择“ 文件” 页,然后单击“ 将所有文件重新定位到文件夹”。 提供 数据文件文件夹日志文件文件夹的新位置。 有关此网格的详细信息,请参阅“还原数据库”(文件页)。

  8. “选项” 页上,根据需要调整选项。 有关这些选项的详细信息,请参阅“还原数据库”(选项页)。

使用 Transact-SQL

将数据库还原到新位置,并选择性地重命名数据库

  1. (可选)确定备份集中包含要还原的完整数据库备份的文件的逻辑名称和物理名称。 此语句返回备份集中包含的数据库和日志文件的列表。 基本语法如下:

    <backup_device> 使用 FILELISTONLY 还原 WITH FILE = backup_set_file_number

    此处, backup_set_file_number 指示备份在介质集中的位置。 可以使用 RESTORE HEADERONLY 语句获取备份集的位置。 有关详细信息,请参阅 RESTORE 参数(Transact-SQL)中的“指定备份集”。

    此语句还支持许多 WITH 选项。 有关详细信息,请参阅 RESTORE FILELISTONLY (Transact-SQL)

  2. 使用 RESTORE DATABASE 语句还原完整数据库备份。 默认情况下,数据和日志文件将还原到其原始位置。 若要重新定位数据库,请使用 MOVE 选项重新定位每个数据库文件,并避免与现有文件发生冲突。

    将数据库还原到新位置和新名称的基本 Transact-SQL 语法为:

    RESTORE DATABASE new_database_name

    FROM backup_device [ ,...n ]

    [ WITH

    {

    [ RECOVERY |NORECOVERY ]

    [ , ][ 文件 ={ 备份集文件编号 | @备份集文件编号 } ]

    [ , ] 将“logical_file_name_in_backup”移动到“operating_system_file_name”[ ,...n ]

    }

    ;

    注释

    准备在不同的磁盘上重新定位数据库时,应验证是否有足够的空间可用,并确定与现有文件发生的任何潜在冲突。 这涉及到使用 RESTORE VERIFYONLY 语句,该语句中指定的 MOVE 参数应该与您计划在 RESTORE DATABASE 语句中使用的相同。

    下表介绍了此 RESTORE 语句的参数,即将数据库还原到新位置。 有关这些参数的详细信息,请参阅 RESTORE (Transact-SQL)

    new_database_name
    数据库的新名称。

    注释

    如果要将数据库还原到其他服务器实例,则可以使用原始数据库名称而不是新名称。

    backup_device [ ,...n ]
    指定要从中还原数据库备份的 1 到 64 个备份设备的逗号分隔列表。 可以指定物理备份设备,也可以指定相应的逻辑备份设备(如果已定义)。 若要指定物理备份设备,请使用 DISK 或 TAPE 选项:

    { DISK | TAPE } =physical_backup_device_name

    有关详细信息,请参阅备份设备(SQL Server)。

    {恢复 | 无恢复}
    如果数据库使用完整恢复模式,则还原数据库后可能需要应用事务日志备份。 在这种情况下,请指定 NORECOVERY 选项。

    否则,请使用默认的 RECOVERY 选项。

    FILE = { 备份集文件编号 | @备份集文件编号 }
    标识要还原的备份集。 例如,backup_set_file_number为 1 表示备份介质上的第一个备份集,backup_set_file_number2 表示第二个备份集。 可以使用 RESTORE HEADERONLY 语句获取备份集的 backup_set_file_number

    如果未指定此选项,则默认值是在备份设备上使用第一个备份集。

    有关详细信息,请参阅 RESTORE 参数(Transact-SQL)中的“指定备份集”。

    logical_file_name_in_backup' ”移动到 operating_system_file_name' [ ,...n ]
    指定由 logical_file_name_in_backup 指定的数据或日志文件要还原到由 operating_system_file_name 指定的位置。 为要从备份集还原到新位置的每个逻辑文件指定 MOVE 语句。

    选项 DESCRIPTION
    备份中的逻辑文件名 指定备份集中数据或日志文件的逻辑名称。 备份集中数据或日志文件的逻辑文件名与创建备份集时数据库中的逻辑名称匹配。

    注意:若要从备份集中获取逻辑文件的列表,请使用 RESTORE FILELISTONLY
    操作系统文件名 指定 由logical_file_name_in_backup指定的文件的新位置。 该文件将还原到此位置。

    (可选) operating_system_file_name 指定已还原文件的新文件名。 如果要在同一服务器实例上创建现有数据库的副本,则需要这样做。
    n 该占位符表示您可以指定其他 MOVE 语句。

示例 (Transact-SQL)

此示例通过还原 AdventureWorks2012 示例数据库的备份来创建一MyAdvWorks个名为的新数据库,其中包括两个文件:AdventureWorks2012_Data 和 AdventureWorks2012_Log。 此数据库使用简单的恢复模式。 AdventureWorks2012 数据库已存在于服务器实例上,因此必须将备份中的文件还原到新位置。 RESTORE FILELISTONLY 语句用于确定要还原的数据库中的文件的数量和名称。 数据库备份是备份设备上的第一个备份集。

注释

备份和还原事务日志(包括时间点还原)的示例使用 MyAdvWorks_FullRMAdventureWorks2012 创建的数据库,就像下面的这个 MyAdvWorks 示例一样。 但是,必须使用以下 Transact-SQL 语句更改生成的 MyAdvWorks_FullRM 数据库才能使用完整恢复模式:ALTER DATABASE <database_name> SET RECOVERY FULL。

USE master;  
GO  
-- First determine the number and names of the files in the backup.  
-- AdventureWorks2012_Backup is the name of the backup device.  
RESTORE FILELISTONLY  
   FROM AdventureWorks2012_Backup;  
-- Restore the files for MyAdvWorks.  
RESTORE DATABASE MyAdvWorks  
   FROM AdventureWorks2012_Backup  
   WITH RECOVERY,  
   MOVE 'AdventureWorks2012_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf',   
   MOVE 'AdventureWorks2012_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf';  
GO  
  

有关如何创建 AdventureWorks2012 数据库的完整数据库备份的示例,请参阅“创建完整数据库备份”(SQL Server)。

相关任务

另请参阅

当数据库在其他服务器实例上可用时管理元数据 (SQL Server)
RESTORE (Transact-SQL)
使用备份和还原复制数据库