您的位置:首页 > 编程语言 > ASP

Asp.net 不使用SQLDMO实现数据库备份和还原

2008-07-20 18:30 731 查看
 今天需要做一个历史数据库,备份还原的程序,就是在sql服务器兴建一个数据库的历史版本的复.手工操作很方便,但是程序来实现我还没做过.上网找资料发现都调用了 SQLDMO 的 SQL COM 来实现. 应为我不想在应用服务器上面引用 COM 组件服务.所以没采取这种方式.打开Sql 联机帮助.发现T-SQL 可以在SQL2000上面直接做恢复和还原.比SQLDMO 方便灵活的多.我们一起来看看.

    数据备份:
       

BACKUP

备份整个数据库、事务日志,或者备份一个或多个文件或文件组。有关数据库备份和恢复操作的更多信息,请参见备份和还原数据库。

语法
备份整个数据库:

BACKUP DATABASE { database_name | @database_name_var }
TO < backup_device > [ ,...n ]
[ WITH
    [ BLOCKSIZE = { blocksize | @blocksize_variable }]     [ [ , ] DESCRIPTION = { 'text' | @text_variable }]     [ [ , ] DIFFERENTIAL]     [ [ , ] EXPIREDATE = { date | @date_var }
        | RETAINDAYS = { days | @days_var }]     [ [ , ] PASSWORD = {password | @password_variable}]     [ [ , ] FORMAT | NOFORMAT]     [ [ , ] { INIT | NOINIT }]     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable }]     [ [ , ] MEDIANAME = { media_name | @media_name_variable }]     [ [ , ] MEDIAPASSWORD = {mediapassword | @mediapassword_variable}]     [ [ , ] NAME = { backup_set_name | @backup_set_name_var }]     [ [ , ] { NOSKIP | SKIP }]     [ [ , ] { NOREWIND | REWIND }]     [ [ , ] { NOUNLOAD | UNLOAD }]     [ [ , ] RESTART]     [ [ , ] STATS [ = percentage ] ]
]

备份特定的文件或文件组:

BACKUP DATABASE { database_name | @database_name_var }
    < file_or_filegroup > [ ,...n ]
TO < backup_device > [ ,...n ]
[ WITH
    [ BLOCKSIZE = { blocksize | @blocksize_variable }]     [ [ , ] DESCRIPTION = { 'text' | @text_variable }]     [ [ , ] DIFFERENTIAL]     [ [ , ] EXPIREDATE = { date | @date_var }
        | RETAINDAYS = { days | @days_var }]     [ [ , ] PASSWORD = {password | @password_variable}]     [ [ , ] FORMAT | NOFORMAT]     [ [ , ] { INIT | NOINIT }]     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable }]     [ [ , ] MEDIANAME = { media_name | @media_name_variable }]     [ [ , ] MEDIAPASSWORD = {mediapassword | @mediapassword_variable}]     [ [ , ] NAME = { backup_set_name | @backup_set_name_var }]     [ [ , ] { NOSKIP | SKIP }]     [ [ , ] { NOREWIND | REWIND }]     [ [ , ] { NOUNLOAD | UNLOAD }]     [ [ , ] RESTART]     [ [ , ] STATS [ = percentage ] ]
]

备份一个事务日志:

BACKUP LOG { database_name | @database_name_var }
{
    TO < backup_device > [ ,...n]     [ WITH
        [ BLOCKSIZE = { blocksize | @blocksize_variable }]         [ [ , ] DESCRIPTION = { 'text' | @text_variable }]         [ [ ,] EXPIREDATE = { date | @date_var }
            | RETAINDAYS = { days | @days_var }]         [ [ , ] PASSWORD = {password | @password_variable}]         [ [ , ] FORMAT | NOFORMAT]         [ [ , ] { INIT | NOINIT }]         [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable }]         [ [ , ] MEDIANAME = { media_name | @media_name_variable }]         [ [ , ] MEDIAPASSWORD = {mediapassword | @mediapassword_variable}]         [ [ , ] NAME = { backup_set_name | @backup_set_name_var }]         [ [ , ] NO_TRUNCATE]         [ [ , ] { NORECOVERY | STANDBY = undo_file_name }]         [ [ , ] { NOREWIND | REWIND }]         [ [ , ] { NOSKIP | SKIP }]         [ [ , ] { NOUNLOAD | UNLOAD }]         [ [ , ] RESTART]         [ [ , ] 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 > ::=
    
{
        FILE = { logical_file_name | @logical_file_name_var}
        |
        FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
    }

截断事务日志:

BACKUP LOG { database_name | @database_name_var }
{
    [ WITH
        { NO_LOG | TRUNCATE_ONLY } ]
}

参数
DATABASE

指定一个完整的数据库备份。假如指定了一个文件和文件组的列表,那么仅有这些被指定的文件和文件组被备份。

说明  在进行完整数据库备份或差异数据库备份时,Microsoft® SQL Server™ 备份足够的事务日志,以生成一个将在还原数据库时使用的一致的数据库。在 master 数据库上只能采用完整数据库备份。
 

{ database_name | @database_name_var }

指定了一个数据库,从该数据库中对事务日志、部分数据库或完整的数据库进行备份。如果作为变量 (@database_name_var) 提供,则可将该名称指定为字符串常量 (@database_name_var = database name) 或字符串数据类型(ntext text 数据类型除外)的变量。
< 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
允许在指定的磁盘或磁带设备上创建备份。在执行 BACKUP 语句之前不必存在指定的物理设备。如果存在物理设备且 BACKUP 语句中没有指定 INIT 选项,则备份将追加到该设备。
当指定 TO DISK 或 TO TAPE 时,请输入完整路径和文件名。例如,DISK = 'C:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/Mybackup.dat' 或 TAPE = '//./TAPE0'。
说明  对于备份到磁盘的情况,如果输入一个相对路径名,备份文件将存储到默认的备份目录中。该目录在安装时被设置并且存储在 KEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer/MSSQLServer 目录下的 BackupDirectory 注册表键值中。
如果使用的是具有统一命名规则 (UNC) 名称的网络服务器或已重新定向的驱动器号,则请指定磁盘的设备类型。
当指定多个文件时,可以混合逻辑文件名(或变量)和物理文件名(或变量)。但是,所有的设备都必须为同一类型(磁盘、磁带或管道)。
Windows 98 不支持备份到磁盘。n

是表示可以指定多个备份设备的占位符。备份设备数目的上限为 64。
BLOCKSIZE = { blocksize | @blocksize_variable }

用字节数来指定物理块的大小。在 Windows NT 系统上,默认设置是设备的默认块大小。一般情况下,当 SQL Server 选择适合于设备的块大小时不需要此参数。在基于 Windows 2000 的计算机上,默认设置是 65,536(64 KB,是 SQL Server 支持的最大大小)。
对于磁盘,BACKUP 自动决定磁盘设备合适的块大小。

说明  如果要将结果备份集存储到 CD-ROM 中然后从 CD-ROM 中恢复,请将 BLOCKSIZE 设为 2048。
 

磁带的默认 BLOCKSIZE 为 65,536 (64 KB)。显式声明块大小将替代 SQL Server 选择的块大小。
DESCRIPTION = { 'text' | @text_variable }

指定描述备份集的自由格式文本。该字符串最长可以有 255 个字符。
DIFFERENTIAL

指定数据库备份或文件备份应该与上一次完整备份后改变的数据库或文件部分保持一致。差异备份一般会比完整备份占用更少的空间。对于上一次完整备份时备份的全部单个日志,使用该选项可以不必再进行备份。有关更多信息,请参见差异数据库备份和文件差异备份。

说明  在进行完整数据库备份或差异备份时,SQL Server 备份足够的事务日志,从而在恢复数据库时生成一个一致的数据库。
 

EXPIREDATE = { date | @date_var }

指定备份集到期和允许被重写的日期。如果将该日期作为变量 (@date_var) 提供,则可以将该日期指定为字符串常量 (@date_var = date)、字符串数据类型变量(ntext text 数据类型除外)、smalldatetime 或者 datetime 变量,并且该日期必须符合已配置的系统 datetime 格式。
RETAINDAYS = { days | @days_var }

指定必须经过多少天才可以重写该备份媒体集。假如用变量 (@days_var) 指定,该变量必须为整型。

重要  假如 EXPIREDATE 或 RETAINDAYS 没有指定,有效期将取决于 sp_configure media retention 配置设置。这些选项仅仅阻止 SQL Server 重写文件。用其它方法可擦除磁带,而通过操作系统可以删除磁盘文件。有关过期验证的更多信息,请参见本主题的 SKIP 和 FORMAT。
 

PASSWORD = {password | @password_variable}

为备份集设置密码。 PASSWORD 是一个字符串。如果为备份集定义了密码,必须提供这个密码才能对该备份集执行任何还原操作。

重要  备份集密码防止未经授权即通过 SQL Server 2000 工具访问备份集的内容,但是不能防止重写备份集。
 

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

指定应将媒体头写入用于此备份操作的所有卷。任何现有的媒体头都被重写。FORMAT 选项使整个媒体内容无效,并且忽略任何现有的内容。

重要  使用 FORMAT 要谨慎。格式化一个备份设备或媒体将使整个媒体集不可用。例如,如果初始化现有条带备份集中的单个磁带,则整个备份集都将变得不可用。
 

通过指定 FORMAT,备份操作也就暗示了 SKIP 和 INIT;这些都不必显式说明。
NOFORMAT

指定媒体头不应写入所有用于该备份操作的卷中,并且不要重写该备份设备除非指定了 INIT。
INIT

指定应重写所有备份集,但是保留媒体头。如果指定了 INIT,将重写那个设备上的所有现有的备份集数据。
当遇到以下几种情况之一时不重写备份媒体:
媒体上的备份设置没有全部过期。有关更多信息,请参见 EXPIREDATE 和 RETAINDAYS 选项。

如果 BACKUP 语句给出了备份集名,该备份集名与备份媒体上的名称不匹配。有关更多信息,请参见 NAME 子句。
使用 SKIP 选项替代这些检查。有关使用 SKIP、NOSKIP、INIT 和 NOINIT 时的相互作用关系的更多信息,请参见注释部分。

说明  如果备份媒体有密码保护,SQL Server 将不写入媒体,除非提供媒体密码。SKIP 选项不替代此检查。只有通过格式化才能重写受密码保护的媒体。有关更多信息,请参见 FORMAT 选项。
 

NOINIT

表示备份集将追加到指定的磁盘或磁带设备上,以保留现有的备份集。NOINIT 是默认设置。
RESTORE 命令的 FILE 选项用于在还原时选择适当的备份集。有关更多信息,请参见 RESTORE。
如果为媒体集定义了媒体密码,则必须提供密码。
MEDIADESCRIPTION = { text | @text_variable }

指明媒体集的自由格式文本描述,最多为 255 个字符。
MEDIADESCRIPTION = { text | @text_variable }

为整个备份媒体集指明媒体名,最多为 128 个字符。假如指定了 MEDIANAME,则它必须与以前指定的媒体名相匹配,该媒体名已存在于备份卷中。假如没有指定 MEDIANAME,或指定了 SKIP 选项,将不会对媒体名进行验证检查。
MEDIAPASSWORD = {mediapassword | @mediapassword_variable}

为媒体集设置密码。MEDIAPASSWORD 是一个字符串。
如果为媒体集定义了密码,则在该媒体集上创建备份集时必须提供此密码。另外,从该媒体集执行任何还原操作时也必须提供媒体密码。只有通过格式化才能重写受密码保护的媒体。有关更多信息,请参见 FORMAT 选项。
有关使用密码的更多信息,请参见"权限"部分。
NAME = { backup_set_name | @backup_set_var }

指定备份集的名称。名称最长可达 128 个字符。假如没有指定 NAME,它将为空。
NORECOVERY

只与 BACKUP LOG 一起使用。备份日志尾部并使数据库处于正在还原的状态。当将故障转移到辅助数据库或在 RESTORE 操作前保存日志尾部时,NORECOVERY 很有用。
STANDBY = undo_file_name

只与 BACKUP LOG 一起使用。备份日志尾部并使数据库处于只读或备用模式。撤消文件名指定了容纳回滚更改的存储,如果随后应用 RESTORE LOG 操作,则必须撤消这些回滚更改。
如果指定的撤消文件名不存在,SQL Server 将创建该文件。如果该文件已存在,则 SQL Server 将重写它。有关更多信息,请参见使用备用服务器。
NOREWIND

指定 SQL Server 在备份操作完成后使磁带保持打开。NOREWIND 意即 NOUNLOAD。SQL Server 将保留磁带驱动器的所有权,直到 BACKUP或 RESTORE 命令使用 REWIND 为止。
如果无意中使磁带处于打开状态,则释放磁带的最快方法是使用下面的 RESTORE 命令:RESTORE LABELONLY FROM TAPE = <name> WITH REWIND

通过查询 master 数据库中的 sysopentapes 表可以查找正在打开的磁带列表。
REWIND

指定 SQL Server 将释放磁带和倒带。如果 NOREWIND 和 REWIND 均未指定,则默认设置为 REWIND。
NOSKIP

指示 BACKUP 语句在可以重写媒体上的所有备份集之前先检查它们的过期日期。
SKIP

禁用备份集过期和名称检查,这些检查一般由 BACKUP 语句执行以防重写备份集。有关更多信息,请参见注释部分。
NOUNLOAD

指定不在备份后从磁带驱动器中自动卸载磁带。设置始终为 NOUNLOAD,直到指定 UNLOAD 为止。该选项只用于磁带设备。
UNLOAD

指定在备份完成后自动倒带并卸载磁带。启动新用户会话时其默认设置为 UNLOAD。该设置一直保持到用户指定了 NOUNLOAD 时为止。该选项只用于磁带设备。
RESTART

指定 SQL Server 重新启动一个被中断的备份操作。因为 RESTART 选项在备份操作被中断处重新启动该操作,所以它节省了时间。若要重新启动一个特定的备份操作,请重复整个 BACKUP 语句并且加入 RESTART 选项。不一定非要使用 RESTART 选项,但是它可以节省时间。

重要  该选项只用于导向磁带媒体的备份和跨越了多个磁带卷的备份。在备份的第一卷上永远不会有重新启动操作。
 

STATS [= percentage]

每当另一个 percentage 结束时显示一条消息,它被用于测量进度。如果省略 percentage,SQL Server 将每完成 10 个百分点显示一条消息。
<file_or_filegroup>

指定包含在数据库备份中的文件或文件组的逻辑名。可以指定多个文件或文件组。
FILE = { logical_file_name | @logical_file_name_var}

给一个或多个包含在数据库备份中的文件命名。
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }

给一个或多个包含在数据库备份中的文件组命名。

说明  当数据库的大小和性能要求使得进行完整数据库备份不切实际时,备份一个文件。若要单独备份事务日志,请使用 BACKUP LOG。
 

重要  必须通过使用 BACKUP LOG 提供事务日志的单独备份,才能使用文件和文件组备份来恢复数据库。有关文件备份的更多信息,请参见备份使用文件备份。
 

如果恢复模型为 SIMPLE,则不允许文件和文件组备份。
n

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

指定只备份事务日志。该日志是从上一次成功执行了的 LOG 备份到当前日志的末尾。一旦备份日志,可能会截断复制或活动事务不再需要的空间。

说明  假如备份日志看来并没有截断大部分的日志,则有可能在日志中存在一个旧的开放事务。可以使用 DBCC SQLPERF (LOGSPACE) 观察日志空间。有关更多信息,请参见事务日志备份。
 

NO_LOG | TRUNCATE_ONLY

无须备份复制日志即删除不活动的日志部分,并且截断日志。该选项会释放空间。因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG 和 TRUNCATE_ONLY 是同义的。
使用 NO_LOG 或 TRUNCATE_ONLY 备份日志后,记录在日志中的更改不可恢复。为了恢复,请立即执行 BACKUP DATABASE。
NO_TRUNCATE

允许在数据库损坏时备份日志。
注释
可以将数据库或日志备份追加到任何磁盘或磁带设备上,从而使得数据库和它的事务日志能存储在一个物理位置中。

当数据库正在使用时,SQL Server 使用一个联机备份过程来对数据库进行备份。下面的列表包括在数据库或事务日志备份时无法进行的操作:

在备份操作时允许进行文件管理操作,如带有 ADD FILE 或 REMOVE FILE 选项的 ALTER DATABASE 语句,以及 INSERT、UPDATE 或 DELETE 语句。

收缩数据库或文件。这包括自动收缩操作。
假如在这些操作正在进行时启动备份,备份将终止。假如正在进行备份时,试图进行这些操作,则操作会失败。

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

备份文件格式
因为 SQL Server 2000 的备份格式遵从 Microsoft 磁带格式 (MTF),该格式与 Windows NT 磁带备份所使用的格式相同,所以 SQL Server 备份可与 Windows NT 备份共存于磁带媒体上。若要确保相互操作性,磁带应由 NTBackup 格式化。

备份类型
SQL Server 支持的备份类型包括:

完整数据库备份,它备份包括事务日志的整个数据库。

在完整数据库备份之间执行差异数据库备份。

事务日志备份。
日志备份序列提供了连续的事务信息链,可支持从数据库、差异或文件备份中快速恢复。

文件和文件组备份。
当时间限制使得完整数据库备份不切实际时,请使用 BACKUP 备份数据库文件和文件组,而不是备份完整数据库。若要备份一个文件而不是整个数据库时,请合理安排步骤以确保数据库中所有的文件按规则备份。同时必须进行单独的事务日志备份。在恢复一个文件备份后,使用事务日志将文件内容前滚,使其与数据库其余部分一致。
在条带集中使用的备份设备必须一直在条带集中使用(除非在某处用 FORMAT 重新初始化),而且设备数目不变。在备份设备已定义为条带集的组成部分后,就不能用于单个设备备份,除非指定了 FORMAT。同样,一个含有非条带集备份的备份设备不能用于条带集,除非指定了 FORMAT。使用 FORMAT 来分开条带备份集。

如果写入媒体头时未指定 MEDIANAME 或 MEDIADESCRIPTION,则与空项对应的媒体头字段将为空。

如果恢复模型为 SIMPLE,则无法使用 BACKUP LOG。应该使用 BACKUP DATABASE 来替代。

SKIP、NOSKIP、INIT 和 NOINIT 间的相互作用
下表说明 { INIT | NOINIT }和{ NOSKIP | SKIP } 子句间是如何相互作用的。

说明  在所有这些交互操作中,如果磁带媒体为空或磁带备份文件不存在,则写入媒体头并继续。如果媒体头不为空或不含有效的媒体头,则指出这是无效的 MTF 媒体并取消备份。
 

 INITNOINIT
SKIP如果卷中包含有效的1 媒体头,则验证媒体密码并重写媒体上的全部备份集,仅保留媒体头。
如果卷不含有效的媒体头,则使用给定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(若有)生成媒体头。
如果卷中包含有效的媒体头,则验证媒体密码并添加备份集,并保留所有现有备份集。
如果卷不含有效的媒体头,则会出错。
NOSKIP如果该卷包含一个有效的媒体头,将执行以下检查:
验证媒体密码。2

如果指定了 MEDIANAME,将验证所给的媒体名是否匹配媒体头的媒体名。

验证媒体上没有未过期的备份集。
如果有,将终止备份。
如果这些检查都通过了,将重写该媒体上一切备份集,只保留媒体头。

如果卷不含有效的媒体头,则使用给定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(若有)生成媒体头。
如果该卷包含一个有效的媒体头,将验证媒体密码*并且验证媒体是否名匹配所给的 MEDIANAME(假如有的话)。如果匹配,追加备份集,同时保留所有现有的备份集。
如果卷不含有效的媒体头,则会出错。
1. 有效性包括 MTF 版本号和其它标题信息。如果不支持指定的版本或指定的版本不是期望值,将会发生错误。
2. 用户必须属于适当的固定数据库或服务器角色,并提供执行备份操作所需的正确媒体密码。

说明  为保持向后兼容性,在 BACKUP 语句的语法中可使用 DUMP 关键字替代 BACKUP 关键字。另外,可使用 TRANSACTION 关键字替代 LOG 关键字。
 

备份历史表
SQL Server 使用以下的备份历史表来跟踪备份活动:

backupfile

backupmediafamily

backupmediaset

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

兼容性注意事项

注意  无法在早期 SQL Server 版本中还原使用 Microsoft® SQL Server™ 2000 创建的备份。
 

权限
BACKUP DATABASE 和 BACKUP LOG 权限默认情况下授予 sysadmin 固定服务器角色和 db_owner db_backupoperator 固定数据库角色的成员。

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

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

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

为不是用相关密码创建的对象指定密码是错误的做法。

BACKUP 使用由 PASSWORD 选项提供的备份集密码创建备份集。另外,BACKUP 正常情况下在写入媒体之前验证由 MEDIAPASSWORD 选项提供的媒体密码。BACKUP 不验证媒体密码的唯一情况是当格式化媒体时,这将重写媒体头。BACKUP 只在下列情况下格式化媒体:

如果指定了 FORMAT 选项。

如果媒体头无效且指定了 INIT。

如果正在写入延续卷。
如果 BACKUP 写入媒体头,BACKUP 将给 MEDIAPASSWORD 选项中指定的值指派媒体集密码。

有关密码对 SKIP、NOSKIP、INIT 和 NOINIT 选项的影响的更多信息,请参见注释部分。

备份设备物理文件的所有权和权限问题可能会妨碍备份操作。SQL Server 必须能够读取并写入设备;运行 SQL Server 服务的帐户必须有写入权限。但是,为设备在系统表中添加项目的 sp_addumpdevice 不检查文件访问权。备份设备物理文件的这些问题可能直到为备份或还原而访问物理资源时才会出现。

示例
A. 备份整个 MyNwind 数据库

说明  MyNwind 数据库仅用于演示。
 

下例创建用于存放 MyNwind 数据库完整备份的逻辑备份设备。-- Create a logical backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_1',
DISK ='c:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/MyNwind_1.dat'
-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_1

B. 备份数据库和日志
本例创建了一个数据库和日志的完整备份。将数据库备份到称为 MyNwind_2 的逻辑备份设备上,然后将日志备份到称为 MyNwindLog1 的逻辑备份设备上。

说明  创建逻辑备份设备需要一次完成。
 -- Create the backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_2',
'c:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/MyNwind_2.dat'
--Create the log backup device.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwindLog1',
'c:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/MyNwindLog1.dat'
-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2
-- Update activity has occurred since the full database backup.
-- Back up the log of the MyNwind database.
BACKUP LOG MyNwind
TO MyNwindLog1
数据库还原

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 语句不会将数据库还原到当前服务器:
在 RESTORE 语句中命名的数据库已经在当前服务器上存在,并且

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

若无法验证现有文件是否属于正在还原的数据库,则 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 DATABASE 语句还原差异备份。

事务日志还原。

个别文件和文件组还原。文件和文件组的还原既可以通过文件或文件组备份操作完成,也可以通过完整数据库备份操作完成。在还原文件或文件组时,必须应用事务日志。此外,文件差异备份可以在完成完整文件还原后还原。
有关更多信息,请参见事务日志备份。

创建并维护热备用服务器或备用服务器。有关备用服务器的更多信息,请参见使用备用服务器。

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

LOAD 可用于代替 RESTORE 关键字。

TRANSACTION 关键字可用于代替 LOG 关键字。

DBO_ONLY 关键字可用于代替 RESTRICTED_USER 关键字。

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

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

 

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

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

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

restorefile

restorefilegroup

restorehistory

说明  执行 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_1WITH NORECOVERY
RESTORE DATABASE MyNwind FROM MyNwind_1WITH 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_1WITH 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

[/code]
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'

[/code]
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

[/code]
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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息