RESTORE (Transact-SQL)

更新日期: 2006 年 12 月 12 日

还原使用 BACKUP 命令所做的备份。 使用此命令,您可以实现以下操作:

  • 基于完整数据库备份还原整个数据库(完整还原)。
  • 还原数据库的一部分(部分还原)。
  • 将特定文件、文件组或页面还原到数据库(文件还原或页面还原)。
  • 将事务日志还原到数据库(事务日志还原)。
  • 将数据库恢复到数据库快照捕获的时间点。

有关数据库备份和还原的详细信息,请参阅在 SQL Server 中备份和还原数据库

ms186858.note(zh-cn,SQL.90).gif注意:
有关参数的说明,请参阅 RESTORE 参数 (Transact-SQL)

主题链接图标Transact-SQL 语法约定

语法

--To restore a complete database from a full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
[ FROM <backup_device> [ ,...n ] ]
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                    @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
    [ [ , ] BLOCKSIZE = { blocksize | @blocksize_variable } ] 
    [ [ , ] BUFFERCOUNT = { buffercount | @buffercount_variable } ] 
   [ [ , ]    MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable } ] 
   [ [ , ] ENABLE_BROKER ] 
   [ [ , ] ERROR_BROKER_CONVERSATIONS ] 
   [ [ , ] NEW_BROKER ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } 
   } ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ] 
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ = percentage ] ] 
    [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ]
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

--Restore part of a database (a partial restore):
RESTORE DATABASE { database_name | @database_name_var } 
  <files_or_filegroups> [ ,...n ] 
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
     PARTIAL 
   [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

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

--To Restore Specific Files, Filegroups, or Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
     <file_or_filegroup_or_pages> [ ,...n ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 

   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ =percentage ] ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
     [ <file_or_filegroup_or_pages> [ ,...n ] ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable }      ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } }
   ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Revert a Database to a Database Snapshot:   
RESTORE DATABASE { database_name | @database_name_var } 
FROM DATABASE_SNAPSHOT = database_snapshot_name 

参数

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

备注

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

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

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

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

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

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

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

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

还原方案

SQL Server 2005 支持各种还原方案:

向后兼容性

若要维护向后兼容性,可以在 RESTORE 语句语法中使用以下关键字:

  • LOAD 关键字可用于代替 RESTORE 关键字。
  • TRANSACTION 关键字可用于代替 LOG 关键字。
  • DBO_ONLY 关键字可用于代替 RESTRICTED_USER 关键字。

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

备份和还原可以与 vardecimal 存储格式一起使用,但必须将数据库引擎至少升级至 SQL Server 2005 Service Pack 2。无法将压缩数据库的备份还原为未压缩的数据库。 也无法将压缩的 Service Pack 2 数据库还原为较早版本的 SQL Server。 有关 vardecimal 存储格式的详细信息,请参阅将 Decimal 数据存储为可变长度类型

RECOVERY 和 NORECOVERY 的比较

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

  • NORECOVERY 指定不发生回滚。 从而使前滚按顺序在下一条语句中继续进行。
    在这种情况下,还原顺序可还原其他备份,并执行前滚。
  • RECOVERY(默认值)表示,应在完成当前备份前滚之后执行回滚。
    恢复数据库要求要还原的整个数据集(“前滚集**”)必须与数据库一致。 如果前滚集尚未前滚到与数据库保持一致的地步,并且指定了 RECOVERY,则数据库引擎将发出错误。

重做还原

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

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

还原全文数据

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

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

ms186858.note(zh-cn,SQL.90).gif注意:
无法将全文目录还原到根目录。

有关详细信息,请参阅备份和还原全文目录

数据库设置和还原

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

ms186858.note(zh-cn,SQL.90).gif注意:
此行为与 SQL Server 2000 之前的 SQL Server 版本不同。

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

备份和还原历史记录表

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

RESTORE LOG

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

ms186858.note(zh-cn,SQL.90).gif注意:
对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,SQL Server 2005 都要求您在还原数据库前备份日志尾部。 除非 RESTORE 语句包含 WITH REPLACE 或 WITH STOPAT 子句,否则,在没有先备份日志尾部的情况下还原数据库时将导致错误。 有关尾日志备份的详细信息,请参阅尾日志备份

在线还原

ms186858.note(zh-cn,SQL.90).gif注意:
只有 SQL Server 2005 Enterprise Edition 支持在线还原。

在支持在线还原的情况下,如果数据库为联机状态,则文件还原和页面还原将自动为在线还原,同时在段落还原的初始阶段之后,辅助文件组也变为在线还原。

ms186858.note(zh-cn,SQL.90).gif注意:
在线还原可能引起延迟的事务

有关详细信息,请参阅执行在线还原

段落还原

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

ms186858.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2000 中,只能从完整数据库备份执行部分还原。 而 SQL Server 2005 则去除了这一限制。

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

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

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

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

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

对恢复的限制

下列情况不支持恢复:

  • 源数据库包含任何只读或压缩的文件组。
  • 某些在创建快照时处于在线状态的文件已离线。
  • 当前存在多个数据库快照。

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

权限

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

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

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

ms186858.security(zh-cn,SQL.90).gif安全说明:
此密码提供的安全性较低。 它旨在防止经过授权的用户和未经授权的用户使用 SQL Server 2005 工具执行不正确的还原操作。 但是不能防止通过其他方式或通过替换密码来读取备份数据。 保护备份的最佳实践是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。 ACL 应设置在创建备份的根目录下。

示例

ms186858.note(zh-cn,SQL.90).gif注意:
AdventureWorks 数据库用于举例说明。AdventureWorks 是 SQL Server 2005 中的示例数据库之一。 Adventure Works Cycles 是一家虚构的制造公司,用于演示数据库概念和方案。有关该数据库的详细信息,请参阅示例和示例数据库

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

RESTORE 示例包括:

  • A. 还原完整数据库
  • B. 还原完整数据库备份和差异数据库备份
  • C. 使用 RESTART 语法还原数据库
  • D. 还原数据库并移动文件
  • E. 使用 BACKUP 和 RESTORE 复制数据库
  • F. 使用 STOPAT 还原到时间点
  • G. 将事务日志还原到标记
  • H. 使用 TAPE 语法还原
  • I. 使用 FILE 和 FILEGROUP 语法还原
  • J. 从数据库快照恢复
ms186858.note(zh-cn,SQL.90).gif注意:
有关其他示例,请参阅几个还原方案的还原顺序的示例以及备份和还原操作指南主题 (Transact-SQL) 中列出的还原操作指南主题。

A. 还原完整数据库

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

RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups
ms186858.note(zh-cn,SQL.90).gif注意:
对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,SQL Server 2005 都要求您在还原数据库前备份日志尾部。 有关详细信息,请参阅尾日志备份

[示例顶部]

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

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

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

[示例顶部]

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

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

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

[示例顶部]

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

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

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.ldf'
RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY

[示例顶部]

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

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

BACKUP DATABASE AdventureWorks 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

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

[示例顶部]

F. 使用 STOPAT 还原到时间点

以下示例将数据库还原到它在 April 15, 202012:00 AM 的状态,并显示涉及多个日志和多个备份设备的还原操作。

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY;

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

[示例顶部]

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

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

USE AdventureWorks
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 AdventureWorks
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';

[示例顶部]

H. 使用 TAPE 语法还原

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

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

[示例顶部]

I. 使用 FILE 和 FILEGROUP 语法还原

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

该数据库备份是名为 MyDatabaseBackups 的逻辑备份设备上的媒体集中的第九个备份集。 下一步,通过使用 WITH NORECOVERY 来还原在 MyDatabaseBackups 设备上的后续三个备份集(101112)中的三个日志备份。 还原最后一个日志备份之后,应当恢复数据库。

ms186858.note(zh-cn,SQL.90).gif注意:
恢复应当作为单独的步骤执行,以减少在还原所有日志备份之前太早进行恢复的可能性。

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)

ms186858.note(zh-cn,SQL.90).gif注意:
恢复到快照将删除所有全文目录。
USE master  
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

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

[示例顶部]

请参阅

参考

BACKUP (Transact-SQL)
RESTORE REWINDONLY (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)

其他资源

备份和还原全文目录
备份和还原复制的数据库
实现 SQL Server 数据库还原方案
媒体集、媒体簇和备份集
了解 SQL Server 中备份的还原和恢复工作方式
查看有关备份的信息

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 向“语法”部分添加了 BLOCKSIZE、BUFFERCOUNT 选项、MAXTRANSFERSIZE 选项。
  • 更正了 RESTORE DATABASE 的 STOPATMARK 和 STOPBEFOREMARK 语法。
  • 在“备注”中添加了有关如何还原已启用 vardecimal 存储格式的 SQL Server 2005 Service Pack 2 数据库的部分。
  • 在“备注”中添加了有关清除计划缓存的部分。
更改的内容:
  • 更正了 STOPAT、STOPATMARK 和 STOPBEFOREMARK 的语法。

2006 年 4 月 14 日

更改的内容:
  • 澄清了离线文件的数据库快照限制。
  • 将备份文件的逻辑名称的语法从 logical_file_name 变量名改为 logical_file_name_in_backup