代码改变世界

9.8 RESTORE 命令

2018-08-09 11:43  笑一笑十年少!!!  阅读(860)  评论(0编辑  收藏  举报


虽然可以使用Management Studio中提供的图形化工具有效地还原数据库,但有很多 髙级的还原选项只能通过Transact-SQL使用。简化的RESTORE命令语法如下所示
RESTORE DATABASE I LOG databasename [File I FileGroup] [FROM <backup_media> [ ,...n ]] [WITH
[CHECKSUM | NO_CHECKSUM)
[[,] FILE =file_number] [[,] MOVE,logical_file_name,TO • operating_system_file_name*][,… n] [[,] RECOVERY | NORECOVERY | STANDBY =standby一file一name] [[,] REPLACE]
[[,] STOPAT =date_time
为简单起见,我们将RESTORE命令分解-下。第一部分是实际的RESTORE命令,
后面通常是DATABASE或 LOG参数,然后是目标数据库名称。另外,RESTORE命令也
可以用来显示备份媒体元数据和检验备份集的完整性。表 9-2提供了各种RESTORE命令,

9.8.1 RESTORE DATABASE database_name
该命令指定还原过程针对的是一个数据库,并指定要还原到的目标数据库的名称。指
定的数据库名称并不是必须存在,也不一定要和已备份数据库的名称一样。
1. FILE
RESTORE DATABASE A W 似语句之后可以是数据库数据文件的逻辑名称,
这样只有该文件会从备份媒体中还原。可以将一个文件指定为完整、文件和文件组备份。
RESTORE DATABASE SmallWorks FILE = * SmallWorksData2 * FROM DISK = ,D:\SQLBackups\SmallWorksFull.BAK
2. FILEGROUP
RESTORE DATABASE血 騰 语 句 之 后 也 可 以 是 一 个 数 据 库 文 件 组 的 名 称 ,
这样只有该文件组会从备份媒体中还原。可以将•个文件组指定为完整和文件组备份。
RESTORE DATABASE SmallWorks FILEGROUP = ,SWUserData2, FROM DISK = * D:\SQLBackups\SmallWorksFull.BAK

3. READ_WRITE_FILEGROUPS
该选项仅还原数据库中没有标记为只读的文件组。此选项可以与完整和部分备份一起
使用。
RESTORE DATABASE SmallWorks READ_WRITE_FILEGROUPS
FROM DISK =*D:\SQLBackups\SmallWorksFull.BAK’

4. PAGE
要从标识一个或多个损坏的数据页的撕裂页或校验和错误中恢复,RESTORE DATABASE
database name语句可以指定还原-个8KB的数据页。页还原选项要求传递文件ID和页ID,

如下所示:
RESTORE DATABASE SmallWorks PAGE =*1:14, FROM DISK = * D :\SQLBackups\SmallWorksFull.BAK

5. RESTORE LOG database_name
RESTORE LOG语句指定了还原过程针对的是一个数据库事务日志。备份必须来自于
一个BACKUP LOG过程。事务日志的还原必须应用于一个现有的数据库。还原的日志备
份的第一个日志序列号(Log Sequence Number, LSN)必须是前一个日志或数据库备份的最 后一个LSN之后的下一连续的LSN。
RESTORE LOG SmallWorks FROM DISK =•D:\SQLBackups\SmallWorksLog.BAK'
9.8.2 FROM 选项
当从数据库备份或日志备份还原数据库时,需要在RESTORE语句的FROM子句中指
定一个备份媒体地址。如果没有指定备份媒体地址,则将执行恢复操作。在恢复操作中,
SQLServer前滚现有事务日志中所有完成的事务,并回滚所有未完成的事务,如下例所示:
RESTORE DATABASE SmallWorks
使用这个语法,可以就地恢复数据库。如果数据库处于RECOVERING状态,但没有
其他的备份可以应用,就必须采用这一选项。
除了就地恢复选项之外,下列参数也是有效的。
1. FROM DISK
FROM DISK = filejocation指定了备份媒体位于一个或多个由驱动器盘符和地址标识 的物理磁盘上,或一个由UNC标识的网络地址上,如下所示:
RESTORE DATABASE SmallWorks FROM DISK = * E :\SQLBackUps\SmallWorksFull.BAK *
RESTORE DATABASE SmallWorks FROM DISK =*\\AughtEight\SQLBackUps\SmallWorksFull.BAK*
2. FROM TAPE
FROM TAPE = tape device指定备份媒体位于一个或多个由磁带UNC标识的磁带上,
如下所示:
RESTORE DATABASE SmallWorks FROM TAPE = ,\\.\tapel,
3. FROM DATABASE_SNAPSHOT
该选项指定在线数据库将被还原至在创建特定数据库快照时该数据库所处的状态。本

章最后将讨论数据库快照。
9.8.3 WITH 子句
FROM子句及其参数之后是WITH子句。RESTORE命令的WITH子句有几个选项。
接下来的小节将介绍最常用的选项。
1. RECOVERY | NORECOVERY
当从一个备份序列还原一个数据库时,除了最后的备份之外,所有的备份都必须以
NORECOVERY选项还原。这使得附加备份可以应用到数据库上。如前所述,RECOVERY
选项完成还原的重做/撤消阶段,使数据库可由客户端连接使用,并防止进行更多的还原操
作。默汄设置是WITH RECOVERY,因此在最终备份完成之前複盖它是很重要的。不存在
UnRecover命令可用于重启还原过程。数据库一旦恢复,必须重启整个还原过程以应用附 加的备份。然而,如果所有可用的备份都已应用,但是数据库没有恢复,那么可以指定
RESTORE DATABASE命令使用当前事务日志调用恢复过程,而不必为还原指定源。
RESTORE DATABASE SmallWorks FROM DISK =•E:\SQLBackups\SmallWorksFull.BAK, WITH NORECOVERY
RESTORE LOG SmallWorks FROM DISK =*E:\SQLBackups\SmallWorksTailLog.BAK’ WITH RECOVERY
2. STANDBY
NORECOVERY选项使数据库处于RECOVERING状态,阻止了对数据库的访问。
STANDBY选项的功能与此类似,但它还允许对数据库进行只读访问。它使用一个备用文
件存储一般会用来恢复数据库的所有撤消信息。STANDBY选项允许在一个单独的服务器
上维护数据库的副本,并定期使用附加事务日志还原更新。此项功能是日志传送的核心,
第 12章将详细介紹日志传送。
RESTORE DATABASE SmallWorks FROM DISK = *E :\SQLBackups\SmallWorksFull.BAK1 WITH STANDBY = 1E :\SQLBackups\SmallWorksUndoRollback.DAT
3. CHECKSUM | NO‘ CHECKSUM
CHECKSUM选项指定了在还原操作中,在数据被重写入数据库中之前验证页校验和
信息。如果备份不是使用CHECKSUM选项创建的,RESTORE…WITH CHECKSUM命令
就会失败。如果还原过程中发生了任何校验和错误,它还会抛出一个错误。
BACKUP DATABASE SmallWorks TO DISK = 'E:\SQLBackups\SmallWorksCheckSumFull.BAK1 WITH CHECKSUM

--Capture the tail of the log prior to restore operation BACKUP LOG SmallWorks TO DISK =•E:\SQLBackups\SmallWorksTailLog.BAK'
WITH NO_TRUNCATE
RESTORE DATABASE SmallWorks FROM DISK = *E :\SQLBackups\SmalIWorksCheckSumFull.BAK* WITH CHECKSUM
4. CONTINUE—AFTER—ERROR I STOP_ON_ERROR
该选项指定了即使备份媒体中出现错误,还原操作仍会进行。如果遇到任何错误,默
认设置STOP_ON_ERROR会导致还原操作失败。
5. FILE
RESTORE命令有一个很让人难以理解的方面,就 是 RESTORE子句中有一个FILE=
选项,指定一个逻辑文件名称;而 WITH子句中也有一个FILE=选项,其中的整数值表示
指定文件中的备份位置。因为多个备份可以存放在使用名称标识的单个地址中,所以区分
它们就很重要。当发送多个备份到同一个文件地址时,这个过程实际上很像把文件存在文
件中。要区分存储在单个文件中的不同备份,需要指定FILE = backup_number选项。下面 的例子显示了多个备份被发送到同一个目标。第一个是完整备份,第二个是差异备份,最
后一个是尾日志备份。该例子还显示了如何从同•个文件的备份进行还原。
--Initialize the backup file and backup the SmallWorks database to the file BACKUP DATABASE SmallWorks TO DISK = *E:\SQLBackups\SmallWorksBackups.BAK' -WITH INIT, DESCRIPTION =*Full Backup of SmallWorks' --Send an Additional backup to the file BACKUP DATABASE SmallWorks TO DISK = 1E :\SQLBackups\SmallWorksBackups.BAK'
WITH DIFFERENTIAL, DESCRIPTION =*Differential Backup of SmallWorks' --Capture the tail of the log prior to restore operation BACKUP LOG SmallWorks TO DISK = 1E :\SQLBackups\SmallWorksBackups.BAK'
WITH NO_TRUNCATE, DESCRIPTION =*Tail Log Backup of SmallWorks' --Restore the Full Backup with NORECOVERY RESTORE DATABASE SmallWorks FROM DISK ='E:\SQLBackups\SmallWorksBackups.BAK’ WITH FILE =1, NORECOVERY
--Restore the Differential Backup with NORECOVERY RESTORE DATABASE SmallWorks FROM DISK = ,E:\SQLBackups\SmallWorksBackups.BAK’ WITH FILE =2, NORECOVERY
--Restore the Tail Log Backup with RECOVERY RESTORE LOG SmallWorks FROM DISK =*E:\SQLBackups\SmallWorksBackups.BAK'
WITH File =3, RECOVERY

6. MOVE...TO".
在还原数据库时,有时需要更改数据库文件的物理名称或位置。MOVE logicalJilename TO 可以实现这一要求。例如,假定已安装了一个新的数据库服
务器,需要将数据库从旧服务器移至新服务器。新服务器的文件系统的组织结构和旧服务
器不一样,因此需要指定新的位置。下面的例子显示了如何把SmallWorks数据库从其原来 的位置移动到标识了数据文件和日志文件的新驱动器h。
RESTORE DATABASE SmallWorks FROM DISK
WITH MOVE
, MOVE
, MOVE
= 'E:\SQLBackups\SmallWorksFull.BAK* * SmallWorksPrimary* TO *S :\SQLData\SmallWorks.mdf' •SmallWorks_log' TO »T :\SQLLogs\SmallWorks_log.ldf1 * SmallWorksDatal* TO •S:\SQLData\SmallWorksDatal.ndf' , MOVE * SmallWorksData2' TO •S:\SQLData\SmallWorksData2.ndf , REPLACE
7. PARTIAL
该选项指定了将还原主要文件组和任何指定的用户定义文件组。本章稍后会介绍部分
还原。
8. REPLACE
该选项覆盖通常的数据库还原安全检査,并指定引用的备份文件应当替換现有的文
件。如果事务日志对于一个尾日志备份不可用,那么这么做是有必要的,但是还原操作会
因为尾日志备份不存在所导致的错误而失败。REPLACE选项还可以使一个数据库的备份
在一个现有数据库上还原,即使文件和名称都不一样。