Transact-SQL 参考

RESTORE

还原使用 BACKUP 命令所做的备份。有关数据库备份和还原操作的更多信息,请参见备份和还原数据库

语法

还原整个数据库:

RESTORE DATABASE { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
    [ RESTRICTED_USER ]
    [ [ , ] FILE = { file_number | @file_number } ]
    [ [ , ] PASSWORD = { password | @password_variable } ]
    
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
    [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
    [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
            [ ,...n ]

    [ [ , ] KEEP_REPLICATION ]
    [ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
    [ [ , ] { NOREWIND | REWIND } ]

    [ [ , ] { NOUNLOAD | UNLOAD } ]
    [ [ , ] REPLACE ]
    [ [ , ] RESTART ]
    [ [ , ] STATS [ = percentage ] ]
]

还原数据库的部分内容:

RESTORE DATABASE { database_name | @database_name_var }
    < file_or_filegroup > [ ,...n ]
[ FROM < backup_device > [ ,...n ] ]
[ WITH

    { PARTIAL }
    
[ [ , ] FILE = { file_number | @file_number } ]
    [ [ , ] PASSWORD = { password | @password_variable } ]
    
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
    [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
    [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]

            [ ,...n ]
    [ [ , ] NORECOVERY ]
    [ [ , ] { NOREWIND | REWIND } ]
    [ [ , ] { NOUNLOAD | UNLOAD } ]
    [ [ , ] REPLACE ]
    [ [ , ] RESTRICTED_USER ]
    [ [ , ] RESTART ]
    [ [ , ] STATS [ = percentage ] ]
]

还原特定的文件或文件组:

RESTORE DATABASE { database_name | @database_name_var }
    < file_or_filegroup > [ ,...n ]
[ FROM < backup_device > [ ,...n ] ]
[ WITH

    [ RESTRICTED_USER ]
    [ [ , ] FILE = { file_number | @file_number } ]
    [ [ , ] PASSWORD = { password | @password_variable } ]
    
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
    [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
    [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]

            [ ,...n ]
    [ [ , ] NORECOVERY ]
    [ [ , ] { NOREWIND | REWIND } ]
    [ [ , ] { NOUNLOAD | UNLOAD } ]
    [ [ , ] REPLACE ]
    [ [ , ] RESTART ]
    [ [ , ] STATS [ = percentage ] ]
]

还原事务日志:

RESTORE LOG { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
    [ RESTRICTED_USER ]
    [ [ , ] FILE = { file_number | @file_number } ]
    [ [ , ] PASSWORD = { password | @password_variable } ]
    [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
            [ ,...n ]

    [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
    [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
    [ [ , ] KEEP_REPLICATION ]

    [ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
    [ [ , ] { NOREWIND | REWIND } ]
    [ [ , ] { NOUNLOAD | UNLOAD } ]
    [ [ , ] RESTART ]
    [ [ , ] STATS [= percentage ] ]
    [ [ , ] STOPAT = { date_time | @date_time_var }
        | [ , ] STOPATMARK = 'mark_name' [ AFTER datetime ]
        | [ , ] STOPBEFOREMARK = 'mark_name' [ 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 > ::=
    
{
        FILE = { logical_file_name | @logical_file_name_var }
        |
        FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var}
    }

参数

DATABASE

指定从备份还原整个数据库。如果指定了文件和文件组列表,则只还原那些文件和文件组。

{database_name | @database_name_var}

是将日志或整个数据库还原到的数据库。如果将其作为变量 (@database_name_var) 提供,则可将该名称指定为字符串常量 (@database_name_var = database name) 或字符串数据类型(ntext text 数据类型除外)的变量。

FROM

指定从中还原备份的备份设备。如果没有指定 FROM 子句,则不会发生备份还原,而是恢复数据库。可用省略 FROM 子句的办法尝试恢复通过 NORECOVERY 选项还原的数据库,或切换到一台备用服务器上。如果省略 FROM 子句,则必须指定 NORECOVERY、RECOVERY 或 STANDBY。

< backup_device >

指定还原操作要使用的逻辑或物理备份设备。可以是下列一种或多种形式:

{'logical_backup_device_name' | @logical_backup_device_name_var}
是由 sp_addumpdevice 创建的备份设备(数据库将从该备份设备还原)的逻辑名称,该名称必须符合标识符规则。如果作为变量 (@logical_backup_device_name_var) 提供,则可以指定字符串常量 (@logical_backup_device_name_var = logical_backup_device_name) 或字符串数据类型(ntext text 数据类型除外)的变量作为备份设备名。
{DISK | TAPE } =
'
physical_backup_device_name' | @physical_backup_device_name_var
允许从命名磁盘或磁带设备还原备份。磁盘或磁带的设备类型应该用设备的真实名称(例如:完整的路径和文件名)来指定:DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\Mybackup.dat' 或 TAPE = '\\.\TAPE0'。如果指定为变量 (@physical_backup_device_name_var),则设备名称可以是字符串常量 (@physical_backup_device_name_var = 'physical_backup_device_name') 或字符串数据类型(ntext text 数据类型除外)的变量。

如果使用的是含有 UNC 名称的网络服务器或已重新定向的驱动器号,则请指定磁盘的设备类型。运行 SQL Server 时所使用的帐户必须具有对远程计算机或网络服务器的 READ 访问权,这样才能执行RESTORE 操作。

n

是表示可以指定多个备份设备和逻辑备份设备的占位符。备份设备或逻辑备份设备最多可以为 64 个。

RESTRICTED_USER

限制只有 db_ownerdbcreator sysadmin 角色的成员才能访问新近还原的数据库。在 SQL Server 2000 中,RESTRICTED_USER 替换了选项 DBO_ONLY。提供 DBO_ONLY 只是为了向后兼容。

该选项可与 RECOVERY 选项一起使用。

有关更多信息,请参见设置数据库选项

FILE = { file_number | @file_number }

标识要还原的备份集。例如,file_number 为 1 表示备份媒体上的第一个备份集,file_number 为 2 表示第二个备份集。

PASSWORD = { password | @password_variable }

提供备份集的密码。PASSWORD 是一个字符串。如果在创建备份集时提供了密码,则从备份集执行还原操作时必须提供密码。

有关使用密码的更多信息,请参见"权限"。

MEDIANAME = {media_name | @media_name_variable}

指定媒体名称。如果提供媒体名称,该名称必须与备份卷上的媒体名称相匹配,否则还原操作将终止。如果 RESTORE 语句没有给出媒体名称,将不对备份卷执行媒体名称匹配检查。

重要  在备份和还原操作中使用一致的媒体名称可以为用于还原操作的媒体提供额外的安全检查。

MEDIAPASSWORD = { mediapassword | @mediapassword_variable}

提供媒体集的密码。MEDIAPASSWORD 是一个字符串。

如果格式化媒体集时提供了密码,则访问该媒体集上的任何备份集时都必须提供该密码。

MOVE 'logical_file_name' TO 'operating_system_file_name'

指定应将给定的 logical_file_name 移到 operating_system_file_name。默认情况下,logical_file_name 将还原到其原始位置。如果使用 RESTORE 语句将数据库复制到相同或不同的服务器上,则可能需要使用 MOVE 选项重新定位数据库文件以避免与现有文件冲突。可以在不同的 MOVE 语句中指定数据库内的每个逻辑文件。

说明  使用 RESTORE FILELISTONLY 从备份集中获取逻辑文件列表。

有关更多信息,请参见复制数据库

n

占位符,表示可通过指定多个 MOVE 语句移动多个逻辑文件。

NORECOVERY

指示还原操作不回滚任何未提交的事务。如果需要应用另一个事务日志,则必须指定 NORECOVERY 或 STANDBY 选项。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。

当还原数据库备份和多个事务日志时,或在需要多个 RESTORE 语句时(例如在完整数据库备份后进行差异数据库备份),SQL Server 要求在除最后的 RESTORE 语句外的所有其它语句上使用 WITH NORECOVERY 选项。

说明  如果指定 NORECOVERY 选项,数据库将处于这个中间的未恢复状态而不可用。

当用于文件或文件组还原操作时,NORECOVERY 强制数据库在还原操作结束后保持还原状态。这在以下情况中很有用:

RECOVERY

指示还原操作回滚任何未提交的事务。在恢复进程后即可随时使用数据库。

如果安排了后续 RESTORE 操作(RESTORE LOG 或从差异数据库备份 RESTORE DATABASE),则应改为指定 NORECOVERY 或 STANDBY。

如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。当从 SQL Server 早期版本中还原备份集时,可能要求将数据库升级。如果指定了 WITH RECOVERY,升级将自动进行。有关更多信息,请参见事务日志备份

STANDBY = undo_file_name

指定撤消文件名以便可以取消恢复效果。撤消文件的大小取决于因未提交的事务所导致的撤消操作量。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。

STANDBY 允许将数据库设定为在事务日志还原期间只能读取,并且可用于备用服务器情形,或用于需要在日志还原操作之间检查数据库的特殊恢复情形。

如果指定的撤消文件名不存在,SQL Server 将创建该文件。如果该文件已存在,则 SQL Server 将重写它。

对同一数据库的连续还原可以使用相同的撤消文件。有关更多信息,请参见使用备用服务器

重要  如果指定的撤消文件所在的驱动器上没有可用的磁盘空间,还原操作将停止。

如果必须升级数据库,则不允许 STANDBY。

KEEP_REPLICATION

指示还原操作在将发布的数据库还原到创建它的服务器以外的服务器上时保留复制设置。当设置复制与日志传送一同使用时,需使用 KEEP_REPLICATION。这样,当在备用服务器上还原数据库或日志备份并且恢复数据库时,可防止删除复制设置。还原备份时若指定了该选项,则不能选择 NORECOVERY 选项。

NOUNLOAD

指定不在 RESTORE 后从磁带机中自动卸载磁带。设置始终为 NOUNLOAD,直到指定 UNLOAD 为止。该选项只用于磁带设备。如果对 RESTORE 使用非磁带设备,将忽略该选项。

NOREWIND

指定 SQL Server 在备份操作完成后使磁带保持打开。磁带保持打开将防止其它过程访问磁带。直到颁发 REWIND 或 UNLOAD 语句,或直到服务器关闭时,才释放该磁带。通过查询 master 数据库中的 sysopentapes 表可查找当前打开的一系列磁带。

NOREWIND 意即 NOUNLOAD。该选项只用于磁带设备。如果对 RESTORE 使用非磁带设备,将忽略该选项。

REWIND

指定 SQL Server 将释放磁带和倒带。如果 NOREWIND 和 REWIND 均未指定,则默认设置为 REWIND。该选项只用于磁带设备。如果对 RESTORE 使用非磁带设备,将忽略该选项。

UNLOAD

指定在还原完成后自动倒带并卸载磁带。启动新用户会话时其默认设置为 UNLOAD。设置始终为 UNLOAD,直到指定 NOUNLOAD 为止。该选项只用于磁带设备。如果对 RESTORE 使用非磁带设备,将忽略该选项。

REPLACE

指定即使存在另一个具有相同名称的数据库,SQL Server 也应该创建指定的数据库及其相关文件。在这种情况下将删除现有的数据库。如果没有指定 REPLACE 选项,则将进行安全检查以防止意外重写其它数据库。安全检查可确保在以下情况中,RESTORE DATABASE 语句不会将数据库还原到当前服务器:

  1. 在 RESTORE 语句中命名的数据库已经在当前服务器上存在,并且

  2. 该数据库名称与备份集中记录的数据库名称不同。

若无法验证现有文件是否属于正在还原的数据库,则 REPLACE 也允许 RESTORE 重写该文件。RESTORE通常拒绝重写已存在的文件。

RESTART

指定 SQL Server 应重新启动被中断的还原操作。RESTART 从中断点重新启动还原操作。

重要  只有当直接从磁带媒体还原以及跨越多个磁带卷还原时才能使用该选项。

STATS [= percentage]

每当另一个 percentage 结束时显示一条消息,并用于测量进度。如果省略 percentage,则 SQL Server 每完成 10 个百分比显示一条消息。

PARTIAL

指定部分还原操作。应用程序或用户错误经常影响到数据库的某个孤立部分(如表)。这类错误的例子包括无效更新或错误地除去表。为支持从这些事件恢复,SQL Server 提供可将数据库的部分内容还原到另一个位置的机制,以使损坏或丢失的数据可复制回原始数据库。

部分还原操作的粒度是数据库文件组。主要文件和文件组始终同指定的文件及其相应的文件组一起还原。还原结果是数据库的一个子集。没有还原的文件组被标记为脱机,不能对其进行访问。

有关更多信息,请参见部分数据库还原操作

<file_or_filegroup>

指定包括在数据库还原中的逻辑文件或文件组的名称。可以指定多个文件或文件组。

FILE = {logical_file_name | @logical_file_name_var}
命名一个或更多包括在数据库还原中的文件。
FILEGROUP = {logical_filegroup_name | @logical_filegroup_name_var}
命名一个或更多包括在数据库还原中的文件组。

当使用此选项时,最后一个文件或文件组还原操作完成后,必须将事务日志应用于数据库文件,以便前滚文件使之与数据库的其余部分保持一致。如果被还原的文件自上次备份后没有一个做过修改,则不必应用事务日志。RESTORE 语句向用户通告这一情况。

n

是一个占位符,表示可以指定多个文件和文件组。对文件或文件组的最大个数没有限制。

LOG

指定对该数据库应用事务日志备份。必须按有序顺序应用事务日志。SQL Server 检查已备份的事务日志,以确保按正确的序列将事务装载到正确的数据库。若要应用多个事务日志,请在除最后一个外的所有还原操作中使用 NORECOVERY 选项。有关更多信息,请参见事务日志备份

STOPAT = date_time | @date_time_var

指定将数据库还原到其在指定的日期和时间时的状态。如果对 STOPAT 使用变量,则该变量必须是 varcharcharsmalldatetime datetime 数据类型。只有在指定的日期和时间前写入的事务日志记录才能应用于数据库。

说明  如果指定的 STOPAT 时间超出 RESTORE LOG 操作的结束范围,数据库将处于不可恢复的状态,其效果与在 RESTORE LOG 中使用 NORECOVERY 一样。

STOPATMARK = 'mark_name' [ AFTER datetime ]

指定恢复到指定的标记,包括包含该标记的事务。如果省略 AFTER datetime,恢复操作将在含有指定名称的第一个标记处停止。如果指定 AFTER datetime,恢复操作将在含有在 datetime 时或 datetime 时之后的指定名称的第一个标记处停止。

STOPBEFOREMARK = 'mark_name' [ AFTER datetime ]

指定恢复到指定的标记,但不包括包含该标记的事务。如果省略 AFTER datetime,恢复操作将在含有指定名称的第一个标记处停止。如果指定 AFTER datetime,恢复操作将在含有在 datetime 时或 datetime 时之后的指定名称的第一个标记处停止。

注释

在还原过程中,指定的数据库必须不处于使用状态。指定数据库中的任何数据将由还原的数据替换。

有关数据库恢复的更多信息,请参见备份和还原数据库

只要操作系统支持数据库排序规则,就可以跨平台执行还原操作,即使这些平台使用不同的处理器类型。有关更多信息,请参见 SQL Server 排序规则基础知识

还原类型

下面是 SQL Server支持的还原类型:

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

数据库设置和还原

当使用 RESTORE DATABASE 语句时,可还原的数据库选项(除 offline 外的所有其它 ALTER DATABASE 可设置选项,以及 merge publish、publishedsubscribed 复制选项)将在 BACKUP 操作结束时大规模地重置为设置值。

说明  该行为与 Microsoft SQL Server 的早期版本不同。

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

有关更多信息,请参见备份和还原复制数据库

还原历史记录表

SQL Server 包含下列还原历史记录表,这些表跟踪每个计算机系统的 RESTORE 活动:

说明  执行 RESTORE 时,将修改备份历史记录表。

还原已损坏的 master 数据库需要特殊的过程。有关更多信息,请参见还原 master 数据库

通过 Microsoft® SQL Server™ 2000 创建的备份无法还原为 SQL Server 的早期版本。

权限

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

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

此外,用户可以为媒体集、备份集或两者指定密码。如果为媒体集指定了密码,则用户若只是适当的固定服务器和数据库角色成员还不足以执行备份。用户还必须提供媒体密码才能执行这些操作。同样,除非在还原命令中指定正确的媒体集密码和备份集密码,否则不能执行还原操作。

在 BACKUP 语句中,定义备份集密码和媒体集密码为可选功能。使用密码可防止利用 SQL Server 2000 工具未经授权地执行还原操作和在媒体中添加备份集,但是,密码不能防止通过 FORMAT 选项重写媒体。

因此,尽管使用密码对防止利用 SQL Server 工具未经授权地访问媒体内容有帮助,但密码不能防止媒体内容被破坏。密码不能完全防止未经授权地访问媒体内容,原因在于备份集中的数据没有加密,理论上可以被专为此目的创建的程序所检查。对于安全性至关重要的场合,防止未经授权的个人访问媒体非常重要。

指定密码时不限定使用者的做法是错误的。

示例

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

A. 还原完整数据库

说明  MyNwind 数据库仅供举例说明。

下例显示还原完整数据库备份。

RESTORE DATABASE MyNwind 
   FROM MyNwind_1
B. 还原完整数据库备份和差异备份

下例还原完整数据库备份后还原差异备份。另外,下例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。

RESTORE DATABASE MyNwind
   FROM MyNwind_1
   WITH NORECOVERY
RESTORE DATABASE MyNwind
   FROM MyNwind_1
   WITH FILE = 2
C. 使用 RESTART 语法还原数据库

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

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE MyNwind
   FROM MyNwind_1
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE MyNwind 
   FROM MyNwind_1 WITH RESTART
D. 还原数据库并移动文件

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

RESTORE DATABASE MyNwind
   FROM MyNwind_1
   WITH NORECOVERY, 
      MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf', 
      MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf'
RESTORE LOG MyNwind
   FROM MyNwindLog1
   WITH RECOVERY
E. 使用 BACKUP 和 RESTORE 创建数据库的复本

下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息,请参见 RESTORE FILELISTONLY

BACKUP DATABASE Northwind 
   TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY 
   FROM DISK = 'c:\Northwind.bak'
RESTORE DATABASE TestDB 
   FROM DISK = 'c:\Northwind.bak'
   WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
   MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
GO
F. 使用 STOPAT 语法还原到即时点和使用多个设备进行还原

下例将数据库还原到其在 1998 年 4 月 15 日中午 12 点时的状态,并显示涉及多个日志和多个备份设备的还原操作。

RESTORE DATABASE MyNwind
   FROM MyNwind_1, MyNwind_2
   WITH NORECOVERY
RESTORE LOG MyNwind
   FROM MyNwindLog1
   WITH NORECOVERY
RESTORE LOG MyNwind
   FROM MyNwindLog2
   WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'
G. 使用 TAPE 语法还原

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

RESTORE DATABASE MyNwind 
   FROM TAPE = '\\.\tape0'
H. 使用 FILE 和 FILEGROUP 语法还原

下例还原一个包含两个文件、一个文件组和一个事务日志的数据库。

RESTORE DATABASE MyNwind
   FILE = 'MyNwind_data_1',
   FILE = 'MyNwind_data_2',
   FILEGROUP = 'new_customers'
   FROM MyNwind_1
   WITH NORECOVERY
-- Restore the log backup.
RESTORE LOG MyNwind
   FROM MyNwindLog1
I. 将事务日志还原到标记处

下例显示将事务日志还原到名为"RoyaltyUpdate"的标记处。

BEGIN TRANSACTION RoyaltyUpdate 
   WITH MARK 'Update royalty values'
GO
USE pubs
GO
UPDATE roysched
   SET royalty = royalty * 1.10
   WHERE title_id LIKE 'PC%'
GO
COMMIT TRANSACTION RoyaltyUpdate
GO
--Time passes. Regular database 
--and log backups are taken.
--An error occurs.
USE master
GO

RESTORE DATABASE pubs
FROM Pubs1
WITH FILE = 3, NORECOVERY
GO
RESTORE LOG pubs
   FROM Pubs1
   WITH FILE = 4,
   STOPATMARK = 'RoyaltyUpdate'

请参见

BACKUP

bcp 实用工具

BEGIN TRANSACTION

数据类型

RESTORE FILELISTONLY

RESTORE HEADERONLY

RESTORE LABELONLY

RESTORE VERIFYONLY

sp_addumpdevice

使用媒体集及媒体家族

使用标识符