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

适用于:SQL Server

本文介绍如何使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 将SQL Server数据库还原到新位置,并选择性地重命名SQL Server数据库。 您可以在同一服务器实例或不同服务器实例上将数据库移到新的目录路径或者创建数据库的副本。

开始之前!

限制和局限

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

先决条件

  • 在完整恢复模式或大容量日志恢复模式下,必须先备份活动事务日志,然后才能还原数据库。 有关详细信息,请参阅备份事务日志 (SQL Server)

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

建议

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

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

安全性

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

权限

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

RESTORE 权限被授予那些成员身份信息始终可由服务器使用的角色。 由于固定数据库角色成员身份只能在数据库可访问且不受损坏时进行检查(在执行 RESTORE 时并非总是如此),因此 db_owner 固定数据库角色的成员没有 RESTORE 权限。

将数据库还原到一个新位置;使用 SSMS 选择重命名该数据库

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

  2. 右键单击“ 数据库”,然后选择“ 还原数据库”。 “还原数据库” 对话框随即打开。

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

    • Database

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

    备注

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

    1. 设备

      选择浏览 (...) 按钮打开 “选择备份设备 ”对话框。 在 “备份介质类型” 框中,从列出的设备类型中选择一种。 若要为“ 备份媒体 ”框选择一个或多个设备,请选择“ 添加”。

      将所需设备添加到 “备份媒体 ”列表框后,选择“ 确定 ”以返回到“ 常规 ”页。

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

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

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

  5. “还原到 ”框中,将默认值保留为“ 执行的最后一次备份 ”,或选择“ 时间线 ”以访问“ 备份时间线 ”对话框,以手动选择停止恢复操作的时间点。 请参阅 Backup Timeline 以获取有关指定特定时间点的详细信息。

  6. “要还原的备份集” 网格中,选择要还原的备份。 此网格将显示对于指定位置可用的备份。 默认情况下,系统会推荐一个恢复计划。 若要覆盖建议的恢复计划,可以更改网格中的选择。 当取消选择某个早期备份时,将自动取消选择那些需要还原该早期备份才能进行的备份。

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

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

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

将数据库还原到一个新位置;使用 T-SQL 选择重命名该数据库

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

    RESTORE FILELISTONLY FROM <BACKUP_DEVICE> 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 ]  

    [ , ] [ FILE ={ *backup_set_file_number* | @*backup_set_file_number* } ]  

    [ , ] MOVE '*logical_file_name_in_backup*' TO '*operating_system_file_name*' [ ,...*n* ]  

}  

;  

注意

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

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

new_database_name
数据库的新名称。

备注

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

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

{ DISK | TAPE } =physical_backup_device_name

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

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

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

FILE = { backup_set_file_number | @backup_set_file_number }
标识要还原的备份集。 例如, backup_set_file_number1 指示备份介质中的第一个备份集, backup_set_file_number2 指示第二个备份集。 你可以通过使用 RESTORE HEADERONLY 语句来获取备份集的 backup_set_file_number

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

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

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

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



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

或者, operating_system_file_name 指定已还原文件的新文件名。 如果您在相同服务器实例上创建现有数据库的副本,则此操作是必需的。
n 是指示可以指定其他 MOVE 语句的占位符。

示例 (Transact-SQL)

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

注意

备份和还原事务日志的示例(包括时点还原)使用从 AdventureWorks2019 创建的 MyAdvWorks_FullRM 数据库的方式与下面的 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  
  

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

相关任务

另请参阅

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