RESTORE (Transact-SQL)
SQL Server 2008 R2 其他版本
还原使用 BACKUP 命令所做的备份。通过此命令,您可以执行下列还原方案:

基于完整数据库备份还原整个数据库(完整还原)。

还原数据库的一部分(部分还原)。

将特定文件或文件组还原到数据库(文件还原)。

将特定页面还原到数据库(页面还原)。

将事务日志还原到数据库(事务日志还原)。

将数据库恢复到数据库快照捕获的时间点。

有关 SQL Server 还原方案的详细信息,请参阅还原与恢复概述 (SQL Server) 和实现 SQL Server 数据库还原方案。

注意
有关参数说明的详细信息,请参阅 RESTORE 参数 (Transact-SQL)。
Transact-SQL 语法约定

语法

--To Restore an Entire Database from a Full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
 [ FROM <backup_device> [ ,...n ] ]
 [ WITH 
   {
    [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
   | ,  <general_WITH_options> [ ,...n ]
   | , <replication_WITH_option>
   | , <change_data_capture_WITH_option>
   | , <service_broker_WITH options> 
   | , <point_in_time_WITH_options—RESTORE_DATABASE> 
   } [ ,...n ]
 ]
[;]--To perform the first step of the initial restore sequence
-- of a piecemeal restore:
RESTORE DATABASE { database_name | @database_name_var } 
   <files_or_filegroups> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
      PARTIAL, NORECOVERY 
      [  , <general_WITH_options> [ ,...n ] 
       | , <point_in_time_WITH_options—RESTORE_DATABASE> 
      ] [ ,...n ] 
[;]--To Restore Specific Files or Filegroups: 
RESTORE DATABASE { database_name | @database_name_var } 
   <file_or_filegroup> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
   {
      [ RECOVERY | NORECOVERY ]
      [ , <general_WITH_options> [ ,...n ] ]
   } [ ,...n ] 
[;]--To Restore Specific Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
   PAGE = 'file:page [ ,...n ]' 
  [ , <file_or_filegroups> ] [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
       NORECOVERY   
      [ , <general_WITH_options> [ ,...n ] ]
[;]--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
 [ <file_or_filegroup_or_pages> [ ,...n ] ]
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
   {
     [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
    | ,  <general_WITH_options> [ ,...n ]
    | , <replication_WITH_option>
    | , <point_in_time_WITH_options—RESTORE_LOG> 
   } [ ,...n ]
 ] 
[;]--To Revert a Database to a Database Snapshot:   
RESTORE DATABASE { database_name | @database_name_var } 
FROM DATABASE_SNAPSHOT = database_snapshot_name <backup_device>::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
 | { DISK | TAPE } = { 'physical_backup_device_name' |
            @physical_backup_device_name_var } 
} <files_or_filegroups>::= 
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var } 
 | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } 
 | READ_WRITE_FILEGROUPS
} <general_WITH_options> [ ,...n ]::= 
--Restore Operation Options
   MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' 
          [ ,...n ] 
 | REPLACE 
 | RESTART 
 | RESTRICTED_USER --Backup Set Options
 | FILE = { backup_set_file_number | @backup_set_file_number } 
 | PASSWORD = { password | @password_variable } --Media Set Options
 | MEDIANAME = { media_name | @media_name_variable } 
 | MEDIAPASSWORD = { mediapassword | @mediapassword_variable } 
 | BLOCKSIZE = { blocksize | @blocksize_variable } --Data Transfer Options
 | BUFFERCOUNT = { buffercount | @buffercount_variable } 
 | MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }--Error Management Options
 | { CHECKSUM | NO_CHECKSUM } 
 | { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } --Monitoring Options
 | STATS [ = percentage ] --Tape Options
 | { REWIND | NOREWIND } 
 | { UNLOAD | NOUNLOAD } <replication_WITH_option>::=
 | KEEP_REPLICATION <change_data_capture_WITH_option>::=
 | KEEP_CDC<service_broker_WITH_options>::= 
 | ENABLE_BROKER 
 | ERROR_BROKER_CONVERSATIONS 
 | NEW_BROKER <point_in_time_WITH_options—RESTORE_DATABASE>::= 
 | {
   STOPAT = { 'datetime'| @datetime_var } 
 | STOPATMARK = { 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
 | STOPBEFOREMARK = {  'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
   } <point_in_time_WITH_options—RESTORE_LOG>::= 
 | {
   STOPAT = { 'datetime'| @datetime_var } 
 | STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
 | STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
   }

参数
有关参数的说明,请参阅 RESTORE 参数 (Transact-SQL)。

注释
您无法将压缩的数据库的备份还原到未压缩的数据库。

在脱机还原过程中,如果指定的数据库正在使用,则在短暂延迟之后,RESTORE 将强制用户离线。对于非主文件组的联机还原,除非要还原的文件组为脱机状态,否则数据库可以保持使用状态。指定数据库中的所有数据都将由还原的数据替换。

有关数据库恢复的详细信息,请参阅了解 SQL Server 中备份的还原和恢复工作方式和实现 SQL Server 数据库还原方案。

只要操作系统支持数据库排序规则,就可以跨平台执行还原操作,即使这些平台使用不同的处理器类型也不例外。

RESTORE 在出现错误之后可以重新启动。此外,您可以指示 RESTORE 继续进行而不必考虑错误,此命令可还原尽可能多的数据(请参阅 CONTINUE_AFTER_ERROR 选项)。有关详细信息,请参阅应对由损坏的备份导致的 SQL Server 还原错误。

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

还原已损坏的 master 数据库需要使用特殊的过程。有关详细信息,请参阅还原 master 数据库时的注意事项。

使用 MicrosoftSQL Server 创建的备份无法还原到早期版本的 SQL Server。

还原数据库将清除 SQL Server 实例的计划缓存。清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。从 SQL Server 2005 Service Pack 2 起,对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志包含以下信息性消息:“由于某些数据库维护或重新配置操作,SQL Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新”。只要每五分钟刷新一次缓存,此消息就将每五分钟记录一次。

正还原的数据库的版本必须至少为 80 (SQL Server 2000),才能还原到 SQL Server 2008 R2。还原兼容级别低于 80 的 SQL Server 2000 或 SQL Server 2005 数据库时,会将其兼容级别设置为 80。

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

SQL Server 支持各种还原方案:

数据库完整还原

还原整个数据库,将从完整数据库备份开始,然后还原差异数据库备份(和日志备份)。有关详细信息,请参阅执行数据库完整还原(简单恢复模式)或执行数据库完整还原(完整恢复模式)。

文件还原

还原多文件组数据库中的文件或文件组。请注意,在简单恢复模式下,该文件必须属于只读文件组。完整文件还原之后,便可还原差异文件备份。有关详细信息,请参阅执行文件还原(完整恢复模式)和执行文件还原(简单恢复模式)。

页面还原

还原单个页面。页面还原仅在完整恢复模式和大容量日志恢复模式下可用。有关详细信息,请参阅执行页面还原。

段落还原

从主文件组和一个或多个辅助文件组开始,分阶段还原数据库。段落还原将从 RESTORE DATABASE 开始,使用 PARTIAL 选项并指定一个或多个要还原的辅助文件组。有关详细信息,请参阅执行段落还原。

仅恢复

恢复那些已经与数据库保持一致且只需使其可用的数据。有关详细信息,请参阅恢复数据库但不还原数据。

事务日志还原。

在完整恢复模式或大容量日志恢复模式下,必须还原日志备份才能到达所需的恢复点。有关还原日志备份的详细信息,请参阅应用事务日志备份。

创建镜像数据库。

有关详细信息,请参阅如何为镜像准备镜像数据库 (Transact-SQL)。

创建和维护备用服务器。有关备用服务器的详细信息,请参阅使用备用服务器。

废止的 RESTORE 关键字

SQL Server 2008 中已停止使用以下关键字:

停止使用的关键字

替换为…

替换关键字的示例

LOAD
RESTORE
RESTORE DATABASE
TRANSACTION
LOG
RESTORE LOG
DBO_ONLY
RESTRICTED_USER
RESTORE DATABASE ... WITH RESTRICTED_USER

还原加密数据库的要求

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

为 vardecimal 存储格式启用的数据库

使用 vardecimal 存储格式时,备份和还原可正常进行。有关 vardecimal 存储格式的详细信息,请参阅将 Decimal 数据存储为可变长度类型。

RECOVERY 和 NORECOVERY 的比较

回滚由 RESTORE 语句通过 [ RECOVERY | NORECOVERY ] 选项控制:

NORECOVERY 指定不发生回滚。从而使前滚按顺序在下一条语句中继续进行。

在这种情况下,还原顺序可还原其他备份,并执行前滚。

RECOVERY(默认值)表示,应在完成当前备份前滚之后执行回滚。

恢复数据库要求要还原的整个数据集(“前滚集”)必须与数据库一致。如果前滚集尚未前滚到与数据库保持一致的地步,并且指定了 RECOVERY,则数据库引擎将发出错误。

重新进行还原

还原结果是无法撤消的,但可以文件为基础重新开始操作而使数据复制和前滚的结果无效。若要重新开始,请再次还原所需的文件并执行前滚。例如,如果您不慎还原了过多的日志备份并超过了预期停止点,则必须重新启动该顺序。

通过还原受影响文件的全部内容,可以中止并重新启动还原顺序。

还原全文数据

全文数据与其他数据库数据一同在完全还原过程中还原。使用常规 RESTORE DATABASE database_name FROM backup_device 语法,将全文文件作为数据库文件还原的一部分进行还原。

RESTORE 语句也可用于对全文数据执行替代位置还原、差异还原、文件和文件组还原,以及差异文件和文件组还原。此外,RESTORE 可以仅还原全文文件,也可以同时还原数据库数据。

注意
从 SQL Server 2005 或 SQL Server 2000 导入的全文目录仍然被视为数据库文件。对于这些目录,用于备份全文目录的 SQL Server 2005 过程仍然适用,只是在备份操作期间不再需要暂停和恢复。有关详细信息,请参阅 SQL Server 2005 联机丛书中的备份和还原全文目录。
数据库设置和还原

在还原过程中,可使用 ALTER DATABASE 设置的大多数数据库选项将强制重置为备份结束时的值。

注意
此行为与 SQL Server 2000 之前的 SQL Server 版本不同。
但是,使用 WITH RESTRICTED_USER 选项将覆盖用户访问选项设置的此行为。此设置总是通过在 RESTORE 语句后加上 WITH RESTRICTED_USER 选项来设置。

备份和还原历史记录表

SQL Server 包含备份和还原历史记录表,这些表可以跟踪每个服务器实例的备份和还原活动。执行还原时,还将修改备份历史记录表。有关这些表的信息,请参阅查看有关备份的信息。

RESTORE LOG

RESTORE LOG 可以包括一个文件列表,从而允许在前滚过程中创建文件。这可用于下列情况:将文件添加到数据库时,日志备份包含了已写入的日志记录。

注意
对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,您必须在还原数据库前备份日志的结尾。还原数据库而不首先备份日志的末尾将导致错误,除非 RESTORE DATABASE 语句包含 WITH REPLACE 或 WITH STOPAT 子句,此子句必须指定数据备份的结束时间或在数据备份结束之后发生的事务。有关结尾日志备份的详细信息,请参阅结尾日志备份。
联机还原

注意
只有 SQL Server 2005 Enterprise Edition 及更高版本才允许联机还原。
在支持联机还原的情况下,如果数据库为联机状态,则文件还原和页面还原将自动为联机还原,同时在段落还原的初始阶段之后,辅助文件组也变为联机还原。

注意
联机还原可能会涉及延迟的事务。
有关详细信息,请参阅执行联机还原。

段落还原

段落还原是 SQL Server 2005 中的新功能,它用于增强 MicrosoftSQL Server 2000 部分还原。使用段落还原,可以在对主文件组和某些辅助文件组进行初始的部分还原后,对文件组进行还原。未还原的文件组被标记为离线,不能对其进行访问。不过,对于离线文件组,可以在以后通过文件还原进行还原。为了允许在不同的时间分阶段还原整个数据库,需要保持对段落还原的检查,以确保数据库的最终一致性。

注意
在 SQL Server 2000 中,只能从完整数据库备份执行部分还原。而 SQL Server 2005 则去除了这一限制。
如果部分还原顺序不包括任何 FILESTREAM 文件组,则不支持时点还原。可以强制该还原顺序以继续执行操作。但在 RESTORE 语句中省略的 FILESTREAM 文件组将永远无法还原。若要强制执行时点还原,请指定 CONTINUE_AFTER_ERROR 选项以及 STOPAT、STOPATMARK 或 STOPBEFOREMARK 选项,还必须在随后的 RESTORE LOG 语句中指定后面的三个选项。如果指定 CONTINUE_AFTER_ERROR,则部分还原顺序将成功,但 FILESTREAM 文件组将不可恢复。

有关段落还原的详细信息,请参阅执行段落还原。

将数据库恢复到数据库快照

“恢复数据库操作”(使用 DATABASE_SNAPSHOT 选项指定)用于及时执行完整的源数据库恢复,该过程将使源数据库恢复到数据库快照时的状态,就是说,用在指定的数据库快照中维护的时间点数据覆盖源数据库。当前只能存在可以恢复到的快照。然后,恢复操作重新生成日志(因此,以后无法将已恢复的数据库前滚到用户错误点)。

丢失的数据仅限于创建快照后数据库更新的数据。已恢复的数据库的元数据与创建快照时的元数据相同。但是,恢复到快照将删除所有全文目录。

从数据库快照恢复不适用于介质恢复。与定期备份集不同,数据库快照并非数据库文件的完整副本。如果数据库或数据库快照已损坏,则可能无法从快照恢复。即便可以恢复,但是如果损坏的话,恢复可能也无法更正该问题。

对恢复的限制

下列情况不支持恢复:

源数据库包含任何只读或压缩的文件组。

某些在创建快照时处于在线状态的文件已离线。

当前存在多个数据库快照。

有关详细信息,请参阅恢复到数据库快照。

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

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

在备份时,可以根据需要为介质集、备份集或这两者指定密码。如果已经在介质集或备份集上定义了密码,则必须在 RESTORE 语句中指定正确的密码。这些密码可防止未经授权而使用 SQL Server 工具执行还原操作以及向介质追加备份集。但是,可以通过 BACKUP 语句的 FORMAT 选项覆盖受密码保护的介质。

安全说明
此密码提供的安全性较低。它旨在防止经过授权的用户或未经授权的用户使用 SQL Server 工具执行不正确的还原操作。但是不能防止通过其他方式或通过替换密码来读取备份数据。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。保护备份的最佳做法是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。ACL 应设置在创建备份的根目录下。
  示例
  注意
AdventureWorks2008R2 数据库用于举例说明。AdventureWorks2008R2 是 SQL Server 中的示例数据库之一。Adventure Works Cycles 是一家虚构的制造公司,用于演示数据库概念和方案。 有关此数据库的详细信息,请参阅AdventureWorks2008R2 示例数据库。
所有的示例均假定已执行了完整数据库备份。

RESTORE 示例包括:

A. 还原完整数据库

B. 还原完整数据库备份和差异数据库备份

C. 使用 RESTART 语法还原数据库

D. 还原数据库并移动文件

E. 使用 BACKUP 和 RESTORE 复制数据库

F. 使用 STOPAT 还原到时间点

G. 将事务日志还原到标记

H. 使用 TAPE 语法还原

I. 使用 FILE 和 FILEGROUP 语法还原

J. 从数据库快照恢复

注意
有关其他示例,请参阅几个还原方案的还原顺序的示例以及备份和还原操作指南主题 (Transact-SQL) 中列出的还原操作指南主题。
A. 还原完整数据库

下面的示例从 AdventureWorks2008R2Backups 逻辑备份设备还原完整数据库备份。有关创建此设备的示例,请参阅备份设备。

RESTORE DATABASE AdventureWorks2008R2 
   FROM AdventureWorks2008R2Backups


注意
对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,SQL Server 都要求您在还原数据库前备份日志尾部。有关详细信息,请参阅结尾日志备份。
[示例顶部]

B. 还原完整数据库备份和差异数据库备份

下面的示例还原完整数据库备份后,从同时还包含差异数据库备份的 Z:\SQLServerBackups\AdventureWorks2008R2.bak 备份设备还原差异备份。要还原的完整数据库备份是设备上的第六个备份集 (FILE = 6),差异数据库备份是设备上的第九个备份集 (FILE = 9)。在恢复了差异备份之后,便恢复了数据库。

RESTORE DATABASE AdventureWorks2008R2
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks2008R2
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak'
   WITH FILE = 9
      RECOVERY;


[示例顶部]

C. 使用 RESTART 语法还原数据库

下面的示例使用 RESTART 选项重新启动因服务器电源故障而中断的 RESTORE 操作。

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks2008R2 
   FROM AdventureWorks2008R2Backups WITH RESTART


[示例顶部]

D. 还原数据库并移动文件

下面的示例还原完整数据库和事务日志,并将还原后的数据库移动到 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data 目录中。

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2008R2_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\NewAdvWorks2008R2.mdf', 
      MOVE 'AdventureWorks2008R2_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\NewAdvWorks2008R2.ldf'
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH RECOVERY


[示例顶部]

E. 使用 BACKUP 和 RESTORE 复制数据库

下面的示例使用 BACKUP 和 RESTORE 语句创建 AdventureWorks2008R2 数据库的副本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新副本称为 TestDB。有关详细信息,请参阅 RESTORE FILELISTONLY (Transact-SQL)。

BACKUP DATABASE AdventureWorks2008R2 
   TO AdventureWorks2008R2Backups ;RESTORE FILELISTONLY 
   FROM AdventureWorks2008R2Backups ;RESTORE DATABASE TestDB 
   FROM AdventureWorks2008R2Backups 
   WITH MOVE 'AdventureWorks2008R2_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks2008R2_Log' TO 'C:\MySQLServer\testdb.ldf';
GO


[示例顶部]

F. 使用 STOPAT 还原到时间点

下面的示例将数据库还原到它在 April 15, 2020 的 12:00 AM 的状态,并显示涉及多个日志备份的还原操作。在备份设备上,要还原的完整数据库备份 AdventureWorks2008R2Backups 是设备上的第三个备份集 (FILE = 3),第一个日志备份是第四个备份集 (FILE = 4),第二个日志备份是第五个备份集 (FILE = 5)。

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=3, NORECOVERY;RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks2008R2 WITH RECOVERY;

[示例顶部]

G. 将事务日志还原到标记

下面的示例将事务日志还原到名为 ListPriceUpdate 的标记事务中的标记处。

USE AdventureWorks2008R2;
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GOUPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GOCOMMIT TRANSACTION ListPriceUpdate;
GO-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master
GORESTORE DATABASE AdventureWorks2008R2
FROM AdventureWorks2008R2Backups
WITH FILE = 3, NORECOVERY;
GORESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';
[示例顶部]

H. 使用 TAPE 语法还原

下面的示例从 TAPE 备份设备还原完整数据库备份。

RESTORE DATABASE AdventureWorks2008R2 
   FROM TAPE = '\\.\tape0'


[示例顶部]

I. 使用 FILE 和 FILEGROUP 语法还原

下面的示例还原名为 MyDatabase 的数据库,该数据库有两个文件、一个辅助文件组和一个事务日志。数据库使用完整恢复模式。

该数据库备份是名为 MyDatabaseBackups 的逻辑备份设备上的介质集中的第九个备份集。接下来,通过使用 WITH NORECOVERY 来还原在 MyDatabaseBackups 设备上的后续三个备份集(10、11 和 12)中的三个日志备份。还原最后一个日志备份之后,应当恢复数据库。

注意
恢复应当作为单独的步骤执行,以减少在还原所有日志备份之前太早进行恢复的可能性。
在 RESTORE DATABASE 中,请注意有两种 FILE 选项类型。在备份设备名称前面的 FILE 选项用于指定要从备份集还原的数据库文件的逻辑文件名;例如,FILE = 'MyDatabase_data_1'。此备份集不是介质集中的第一个数据库备份;因此,应当通过在 WITH 子句中使用 FILE 选项(即 FILE=9)来指示它在介质集中的位置。

RESTORE DATABASE MyDatabase
   FILE = 'MyDatabase_data_1',
   FILE = 'MyDatabase_data_2',
   FILEGROUP = 'new_customers'
   FROM MyDatabaseBackups
   WITH 
      FILE = 9,
      NORECOVERY;
GO
-- Restore the log backups.
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 10, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 11, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 12, 
      NORECOVERY;
GO
--Recover the database:
RESTORE DATABASE MyDatabase WITH RECOVERY;
GO


[示例顶部]

J. 从数据库快照恢复

下面的示例将数据库恢复到数据库快照。该示例假定该数据库当前仅存在一个快照。有关如何创建此数据库快照的示例,请参阅如何创建数据库快照 (Transact-SQL)。

注意
恢复到快照将删除所有全文目录。

USE master  
RESTORE DATABASE AdventureWorks2008R2 FROM DATABASE_SNAPSHOT = 'AdventureWorks2008R2_dbss1800';
GO

有关详细信息,请参阅恢复到数据库快照。

[示例顶部]