RESTORE (Transact-SQL)

还原使用 BACKUP 命令所做的备份。 通过此命令,您可以执行下列还原方案:

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

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

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

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

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

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

有关 SQL Server 还原方案的详细信息,请参阅还原与恢复概述 (SQL Server)

注意注意

有关参数说明的详细信息,请参阅 RESTORE 参数 (Transact-SQL)

注意注意

从 SQL Server 2012 SP1 累积更新 2 开始,支持 SQL Server 备份到 Windows Azure Blob 存储服务。 有关详细信息,请参阅备份和还原增强功能使用 Windows Azure Blob 存储服务进行 SQL Server 备份和还原

主题链接图标 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>
   | , <FILESTREAM_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

<FILESTREAM_WITH_option>::=
 | FILESTREAM ( DIRECTORY_NAME = directory_name )


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

关于还原方案

SQL Server 支持各种还原方案:

有关 RESTORE 选项的其他注意事项

废止的 RESTORE 关键字

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

停止使用的关键字

替换为…

替换关键字的示例

LOAD

RESTORE

RESTORE DATABASE

TRANSACTION

LOG

RESTORE LOG

DBO_ONLY

RESTRICTED_USER

RESTORE DATABASE ... WITH RESTRICTED_USER

RESTORE LOG

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

注意注意

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

RECOVERY 和 NORECOVERY 的比较

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

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

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

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

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

兼容性支持

在 SQL Server 2012 中,可以从使用 SQL Server 2005 或更高版本创建的数据库备份来还原用户数据库。 但是,SQL Server 2012 无法还原使用 SQL Server 2005 或 SQL Server 2008 创建的 mastermodelmsdb 备份。 此外,任何早期版本的 SQL Server 都无法还原在 SQL Server 2012 中创建的备份。

注意注意

SQL Server 备份不会还原到比创建了备份的版本还早的 SQL Server 版本。

SQL Server 2012 使用与早期版本不同的默认路径。 因此,若要还原在 SQL Server 2005 或 SQL Server 2008 备份的默认位置创建的数据库,必须使用 MOVE 选项。 有关新默认路径的信息,请参阅 SQL Server 的默认实例和命名实例的文件位置

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

当数据库第一次附加或还原到新的 SQL Server 实例时,数据库主密钥(由服务主密钥加密)的副本尚未存储在服务器中。 必须使用 OPEN MASTER KEY 语句解密数据库主密钥 (DMK)。 一旦 DMK 解密后,通过使用 ALTER MASTER KEY REGENERATE 语句向服务器提供 DMK(使用服务主密钥 (SMK) 加密)的副本,即可拥有将来启用自动解密的选项。 当数据库已从较早版本升级后,应重新生成 DMK 以使用更新的 AES 算法。 有关重新生成 DMK 的详细信息,请参阅 ALTER MASTER KEY (Transact-SQL)。 重新生成 DMK 密钥以升级到 AES 所需的时间取决于 DMK 保护的对象数。 重新生成 DMK 密钥以升级到 AES 只在必需时执行一次,不影响将来作为密钥循环策略的一部分而重新生成的过程。

一般备注

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

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

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

RESTORE 在出现错误之后可以重新启动。 此外,您可以指示 RESTORE 继续进行而不必考虑错误,此命令可还原尽可能多的数据(请参阅 CONTINUE_AFTER_ERROR 选项)。

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

还原已损坏的 master 数据库需要使用特殊的过程。 有关详细信息,请参阅系统数据库的备份和还原 (SQL Server)

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

要还原可用性数据库,首先需要将数据库还原成 SQL Server 的实例,然后再将数据库添加到可用性组。

互操作性

数据库设置和还原

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

但是,使用 WITH RESTRICTED_USER 选项将覆盖用户访问选项设置的此行为。 此设置总是通过在 RESTORE 语句后加上 WITH RESTRICTED_USER 选项来设置。

还原加密数据库

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

还原为 vardecimal 存储启用的数据库

使用 vardecimal 存储格式时,备份和还原可正常进行。 有关 vardecimal 存储格式的详细信息,请参阅sp_db_vardecimal_storage_format (Transact-SQL)

还原全文数据

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

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

注意注意

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

元数据

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

REPLACE 选项的影响

应尽可能避免使用 REPLACE,而且在使用该选项之前必须仔细考虑。 还原一般会防止意外使用一个数据库覆盖另一个数据库。 如果 RESTORE 语句中指定的数据库已存在于当前服务器上,并且指定的数据库系列 GUID 与备份集中记录的数据库系列 GUID 不同,则不还原该数据库。 这是一项重要的安全保护措施。

使用 REPLACE 选项后,就会忽略还原时通常执行的几项重要安全检查。 忽略的检查如下:

  • 还原时使用其他数据库的备份覆盖现有数据库。

    使用 REPLACE 选项后,即使指定的数据库名称与备份集中记录的数据库名称不同,还原也允许您使用备份集中任何一个数据库覆盖现有数据库。 这会导致一个数据库意外覆盖另一个数据库。

  • 在没有获取结尾日志备份并也没有使用 STOPAT 选项的情况下,使用完整恢复模式或大容量日志恢复模式对数据库进行还原。

    使用 REPLACE 选项后,由于没有备份最近写入的日志,您会丢失提交的作业。

  • 覆盖现有文件。

    例如,可能会错误地覆盖错误类型的文件,如 .xls 文件或非联机状态的其他数据库正在使用的文件等。 如果覆盖现有文件,则即使所还原的数据库是完整的,也有可能丢失某些数据。

重新进行还原

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

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

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

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

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

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

对恢复的限制

下列情况不支持恢复:

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

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

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

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

安全性

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

安全说明安全说明

此密码提供的安全性较低。 它旨在防止经过授权的用户或未经授权的用户使用 SQL Server 工具执行不正确的还原操作。 但是不能防止通过其他方式或通过替换密码来读取备份数据。 后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。保护备份的最佳做法是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。 ACL 应设置在创建备份的根目录下。

权限

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

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

示例

所有的示例均假定已执行了完整数据库备份。

RESTORE 示例包括:

  • A. 还原完整数据库

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

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

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

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

  • F. 使用 STOPAT 还原到某个时间点

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

  • H. 使用 TAPE 语法还原

  • I. 使用 FILE 和 FILEGROUP 语法还原

  • J. 从数据库快照恢复

注意注意

有关其他示例,请参阅还原与恢复概述 (SQL Server) 中列出的还原操作指南主题。

A.还原完整数据库

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

RESTORE DATABASE AdventureWorks2012 
   FROM AdventureWorks2012Backups;
注意注意

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

[示例顶部]

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

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

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

[示例顶部]

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

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

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups;
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks2012 
   FROM AdventureWorksBackups WITH RESTART;

[示例顶部]

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

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

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';
RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH RECOVERY;

[示例顶部]

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

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

BACKUP DATABASE AdventureWorks2012 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorksBackups 
   WITH MOVE 'AdventureWorks2012_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks2012_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

[示例顶部]

F.使用 STOPAT 还原到某个时间点

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

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH FILE=3, NORECOVERY;

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY; 

[示例顶部]

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

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

USE AdventureWorks2012
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GO

UPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GO

COMMIT TRANSACTION ListPriceUpdate;
GO

-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master;
GO

RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'UPDATE Product list prices';

[示例顶部]

H.使用 TAPE 语法还原

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

RESTORE DATABASE AdventureWorks2012 
   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

[示例顶部]

K.从数据库快照恢复

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

注意注意

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

USE master;  
RESTORE DATABASE AdventureWorks2012 FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

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

[示例顶部]

请参阅

参考

BACKUP (Transact-SQL)

RESTORE REWINDONLY (Transact-SQL)

RESTORE VERIFYONLY (Transact-SQL)

概念

SQL Server 数据库的备份和还原

系统数据库的备份和还原 (SQL Server)

备份和还原全文目录和索引

备份和还原复制的数据库

介质集、介质簇和备份集 (SQL Server)

备份历史记录和标头信息 (SQL Server)