Professional Documents
Culture Documents
SQLSERVER 恢复命令restore详解
SQLSERVER 恢复命令restore详解
SQLSERVER 恢复命令restore总结
一、概述
SQLSERVER的备份与恢复命令:BACKUP和RESTORE是一对孪生兄弟,在前一篇文章中我们介绍了
BACKUP命令及其选项的使用,
二、命令
2.1 RESTORE命令
2.1.1 RESTORE HEADERONLY
RESTORE HEADERONLY 选项允许您查看特定备份设备的所有备份的备份头信息。在大多数情况下,您
创建的每个备份只有一个备份存储在物理文件中,因此您可能只会看到一个标题记录,但如果您在一个
文件中有多个备份,您会看到每个备份的信息。
T-SQL
右键单击数据库
选择“恢复数据库...”
选择“从设备:”,然后单击“...”
单击“添加”并选择后备文件,在本例中为“C:\AdventureWorks.BAK”并单击“确定”
再次点击“确定”可以看到备份文件的内容,下图可以看到这个文件有两个备份
2.1.2 RESTORE LABELONLY
RESTORE LABELONLY允许您查看备份设备的备份介质信息。因此,如果备份设备(例如备份文件)有
多个备份,您将只能获得一条记录,该记录会为您提供有关介质集的信息,例如用于创建备份的软件、
介质的创建日期等。
T-SQL
T-SQL
结果集如下所示。这里有用的东西包括LogicalName 和PhysicalName。
2.1.4 RESTORE DATABASE
RESTORE DATABASE 选项允许您恢复完整、差异、文件或文件组备份。恢复数据库时需要对数据库进
行独占访问,这意味着没有其他用户连接可以使用该数据库。可以使用 T-SQL 或使用 SQL Server
Management Studio 完成 RESTORE DATABASE 选项。
T-SQL
恢复完整备份
这将使用指定文件恢复数据库。如果数据库已经存在,它将覆盖文件。如果数据库不存在,它将创建数
据库并将文件恢复到备份中指定的相同位置。可以使用RESTORE FILELISTONLY检查原始位置。
恢复完整备份允许额外的恢复,例如差异或事务日志备份 (NORECOVERY)
NORECOVERY 选项在恢复完成后使数据库处于恢复状态。这允许您恢复其他文件以使数据库更新。默
认情况下,此选项处于关闭状态。
使用具有多个备份的备份文件进行还原
恢复事务日志时,您将需要对数据库的独占访问权限,这意味着没有其他用户连接可以使用该数据
库。如果数据库处于恢复状态,这不是问题,因为没有人可以使用该数据库。
可以使用 T-SQL 或使用 SQL Server Management Studio 完成 RESTORE LOG 选项。
T-SQL
恢复事务日志备份
要恢复事务日志备份,数据库需要处于恢复状态。这意味着您必须恢复完整备份,可能还需要恢复差异
备份。
还原多个事务日志文件 (NORECOVERY)
NORECOVERY 选项在还原完成后使数据库处于还原状态。这允许您恢复其他文件以使数据库更新。
默认情况下,此选项处于关闭状态。例如需要恢复两个事务日志备份,第一个使用 NORECOVERY 而第
二个语句不使用,这意味着在恢复完成后可以访问数据库。
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks_1.TRN' WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks_2.TRN'
GO
从同一个备份文件恢复多个事务日志备份
T-SQL
检查磁盘上的备份文件
检查磁盘上的备份文件是否有特定备份
此命令将检查此备份文件中的第二个备份。要检查备份中的内容,您可以使用RESTORE HEADERONLY
并使用 Position 列指定 FILE 编号。
2.2 Restore 选项
除了我们前面已经讨论过的命令之外,Restore还有许多其他选项可以与这些命令一起使用。
RECOVERY
NORECOVERY
STATS
REPLACE
MOVE
STOPAT
2.2.1 RECOVERY
RESTORE ... WITH RECOVERY 选项将数据库置于可用状态,因此用户可以访问已恢复的数据库。 当您
发出 RESTORE DATABASE 或 RESTORE LOG 命令时,默认使用 WITH RECOVERY 选项。无需指定此选
项即可执行此操作。
T-SQL
恢复处于 RECOVERY状态
如上所述,此选项是默认选项,但您可以按如下方式指定。此选项是默认选项,但您可以按如下方式指
定。
2.2.2 NORECOVERY
RESTORE ... WITH NORECOVERY 选项将数据库置于“正在恢复”状态,因此可以恢复其他备份。当数据
库处于“正在恢复”状态时,没有用户可以访问数据库或数据库的内容。
此选项默认不启用,因此如果您需要通过恢复多个备份文件来恢复数据库而忘记使用此选项,则必须重
新开始备份过程。
最常见的示例是恢复“完整”备份和一个或多个“事务日志”备份。
T-SQL
恢复完整备份和一个事务日志备份
第一个命令执行恢复并使数据库处于恢复状态,第二个命令恢复事务日志备份,然后使数据库可用。
RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO
还原完整备份和两个事务日志备份
还原完整备份、最新差异备份和两个事务日志备份
2.2.3 STATS
RESTORE WITH STATS 选项允许您查看还原过程的进度,这个选项也可用于 RESTORE DATABASE、
RESTORE LOG、RESTORE VERIFYONLY。RESTORE WITH STATS 选项将让您了解当前还原过程的进
度。此信息以完成百分比表示。默认是每 10% 后显示,或者可以指定百分比值。
T-SQL
使用默认统计设置恢复完整数据库
以下将显示每个 10% 段后的完成百分比。
恢复完整的数据库,每完成 1% 就会显示统计信息
这将在每完成 1% 后显示进度。
RESTORE DATABASE 'AdventureWorks' FROM DISK = 'C:\AdventureWorks.BAK' WITH STATS
= 1
GO
2.2.4 REPLACE
RESTORE ... WITH REPLACE 选项允许您在进行还原时覆盖现有数据库。在某些情况下,当您尝试进行
还原时,您可能会收到一条错误消息,提示“数据库的日志尾部 .. 尚未备份”。
下面的命令将恢复数据库并忽略当前事务日志中的任何活动数据。
2.2.5 MOVE
RESTORE ... WITH MOVE 选项允许您恢复数据库,但也可以指定数据库文件(mdf 和 ldf)的新位置。
如果您要从该数据库的备份还原现有数据库,则不需要这样做,但如果您要从具有不同文件位置的不同
实例还原数据库,则可能需要使用此选项。
如果已经存在另一个使用您尝试还原的相同文件名的数据库并且该数据库处于联机状态,则还原将失
败。但是如果数据库由于某种原因不在线并且文件没有打开,如果你不使用 WITH MOVE 选项,恢复将
覆盖这些文件,所以要小心你不要意外覆盖好的数据库文件。
T-SQL
1、确定备份的内容
您需要做的第一件事是确定文件的逻辑名称和物理位置。这可以通过使用RESTORE FILELISTONLY命令
来完成。这将为您提供逻辑名称和物理名称。
例如:
Type D L
假设我们要恢复这个数据库,但我们希望将数据文件放在“G:\SQLData”文件夹中,将事务日志文件放在
“H:\SQLLog”文件夹中。该命令如下所示:
还原完整和事务日志备份 WITH
2.2.6 STOPAT
RESTORE ... WITH STOPAT 选项允许您将数据库恢复到某个时间点。为了使此选项起作用,数据库需要
处于 FULL 或 Bulk-Logged 恢复模式,并且您需要进行事务日志备份。
当数据写入数据库时,它首先写入事务日志,然后在事务完成后写入数据文件。还原事务日志时,SQL
Server 将重播事务日志中的所有事务,并在将数据库置于可用状态之前前滚或回滚它需要的事务。
使用 STOPAT 还原数据库
在此示例中,我们有一个完整备份并且事务日志具有最低限度记录的操作。我们可以尝试使用以下命令
进行时间点恢复:
但是如果有批量操作我们会得到这个错误。
恢复操作将完成,但它会恢复整个事务日志备份并使数据库处于“正在恢复”状态。然后,您可以恢复其
他事务日志或使用RESTORE .. WITH RECOVERY选项使数据库重新联机。
2.2.7 独占数据库访问权限
还原数据库时,您需要做的一件事是确保您拥有对数据库的独占访问权限。如果数据库中有任何其他用
户,则还原将失败。
获得独家访问权
要获得独占访问权限,需要删除所有其他连接或更改它们所在的数据库,以便它们不使用您尝试恢复的
数据库。您可以使用sp_who2或SSMS查看哪些连接正在使用您尝试恢复的数据库。
使用 KILL
获得独占访问权的一个选项是使用 KILL 命令来终止正在使用数据库的每个连接。但要注意您要终止的连
接以及可能需要发生的回滚问题。
使用 ALTER DATABASE
另一种选择是将数据库置于单用户模式,然后进行恢复。这也会根据您使用的选项进行回滚,但会一次
完成所有连接。
三、小结
本文详解了SQLSERVER数据库恢复命令restore的使用方法和常见选项,结合具体的例子,简单明了,
对于数据库恢复原理和实战有一个令人深刻的认识。