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

适用范围:SQL Server

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

局限性

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

先决条件

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

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

建议

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

  • 如果将 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的权限。 如果数据库存在,则权限默认授予 sysadmindbcreator 固定服务器角色的成员,以及数据库的所有者(dbo)。

RESTORE 向成员身份信息始终可供服务器使用的角色授予权限。 由于只有在数据库可访问且未损坏时,才能检查固定数据库角色的成员身份,而在运行RESTORE时,这种情况并不总是如此,因此db_owner固定数据库角色的成员没有RESTORE权限。

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

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

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

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

    • Database

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

      注意

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

    • 设备

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

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

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

      注意

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

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

  5. 还原到框中,保留默认的上次已执行的备份或选择时间线以访问备份时间线对话框,以手动选择一个时间点来停止恢复操作。 有关指定特定时间点的详细信息,请参阅 备份时间线

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

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

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

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

使用 T-SQL 将数据库还原到新位置,并选择性地重命名数据库

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

    RESTORE FILELISTONLY FROM backup_device WITH FILE = *backup_set_file_number
    

    其中,backup_set_file_number 指示备份在介质集中的位置。 您可以通过使用 RESTORE HEADERONLY 语句来获取备份集的位置。 有关更多信息,请参阅“指定备份集”。

    此语句还支持多个 WITH 选项。 有关详细信息,请参阅 RESTORE FILELISTONLY

  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 语句的参数。 有关这些参数(arguments)的详细信息,请参阅 RESTORE 语句

new_database_name

数据库的新名称。

注意

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

backup_device [ , ...n ]

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

{ DISK | TAPE } = physical_backup_device_name

有关详细信息,请参阅 备份设备

{ 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)。

将“logical_file_name_in_backup”移动到“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)

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

注意

备份和还原事务日志(包括时间点还原)的示例使用从 AdventureWorks2022 创建的 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.
-- AdventureWorks2022_Backup is the name of the backup device.
RESTORE FILELISTONLY
   FROM AdventureWorks2022_Backup;

-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
   FROM AdventureWorks2022_Backup
   WITH RECOVERY,
   MOVE 'AdventureWorks2022_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf',
   MOVE 'AdventureWorks2022_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf';
GO

有关如何创建数据库的完整数据库备份 AdventureWorks2022 的示例,请参阅 “创建完整数据库备份”。