微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > SQL Server块日志恢复

SQL Server块日志恢复

时间:04-25 来源:techtarget 点击:
SQL Server提供了三种恢复模型:简单,完全和块日志模型。这些模型为你从备份中重新存储数据库提供了各种层级的恢复。块日志恢复的优点包括对事务日志空间的最小要求,块操作的最好性能。虽然如此,仍需消息。它的一个缺点就是当你在备份文件中执行块日志的事务的时候,你无法进行某个时间点的恢复。

  在这篇贴士中,我将会解释你可能会想要选择块日志作为SQL Server恢复手段的环境,以及在这个模型下,你需要哪些步骤来对数据库进行重新存储。

  作为回顾,这里列举了各个恢复模型之间的区别:

  简单模型

  简单恢复模型只能允许你将数据恢复到最近的一次完全备份或者差别备份。事务日志备份不可用,因为事务日志的内容在每次数据库执行检查点的时候都被截断了。

  完全模型

  完全恢复模型可以使用完全备份,差别备份和事务日志备份来提供安全网来抵御完全的失败。因为它可以使用完全或者差别备份来进行重新存储,你就可以将数据库恢复到失败的那个点或者其它某个特定的时间点上去。所有的操作,包括块操作,例如SELECT INTO, CREATE INDEX和块载入数据,都是完全记录日志并可以恢复的。

  块日志

  块日志恢复模型可以提供预防失败的保护,提供最好的性能。为了获得更好的性能,只在最低限度上记录如下的操作,并不是可以完全恢复的:SELECT INTO, 块操作, CREATE INDEX,以及其它有关文字和图像的操作。在块日志恢复模型中,损坏的数据文件将会由于日志的不充分而导致手工完成redo的工作。此外,块日志恢复模型可以让数据库恢复到事务日志备份的结尾,只有当日志备份包含了块更改的时候。

  块日志的好处

  使用块日志恢复模型的一个主要的好处就是他最小化了事务日志所需要的空间,这样它就可以跟踪事务中的某个单个的操作。这一点在你的系统很大,你需要导入大量数据或者创建一个大索引的时候,非常有用。事务仍然被提交了,并且写入了你的数据文件,但是事务日志所需要的空间却没有完全恢复模型那么大。在测试中,你可以看到,插入数据仍然需要大量的事务日志空间,但是创建索引所需要的空间则小得多。

  根据SQL Server备份和恢复模型工作的方式,你可以选择将你的模型从完全恢复改变到块日志恢复,然后再在需要的时候,恢复到完全恢复模型,而不需要干扰年的事务日志备份。这可以让你在执行较大的块日志事务的时候,能够保证事务日志的规模在控制之内。

  要注意的一件事情就是事务写入事务日志备份的方式。如果在你的备份文件中有块日志事务,你就不能进行时间点的恢复。这也是你在处理重新存储的时候需要注意的最大的一件事情。当事务日志备份中存在块日志事务的时候,你必须重新存储整个事务日志。

  备份处理

  备份处理的工作方式一样,无论你的数据库是在完全还是块日志恢复模型。你仍然有选择使用完全、区别和事务日志备份的自由。命令也是完全相同的,如下所示:

  BACKUP DATABASE Test TO DISK='C:Test_full.BAK'

  BACKUP DATABASE Test TO DISK='C:Test_diff.BAK' WITH DIFFERENTIAL

  BACKUP LOG Test TO DISK='C:Test_log.TRN'

  事务日志备份需要注意的另外一件关键的事情就是事务日志备份文件的尺寸。如果你设置了你的数据库采用块日志恢复模型,并且执行了最低限度的日志事务,例如CREATE INDEX,你会看到事务日志自身并没有增大。但是当你执行的是事务日志备份语句的时候,悲愤文件就会变得非常大,因为所有为了重新存储你的数据库的语句所需要重放的数据都存下来了。

重新存储过程

  重新存储的过程与重新存储的观点非常类似。一个区别就在于,如果你的事务日志备份文件包含了任何块日志事务的话,你就不能重新存储到某个时间点。如果你尝试使用时间点恢复,而事务日志备份中含有块日志活动,你就会遇到下面的错误信息:

Server: Msg 4327, Level 16, State 1, Line 1


  这个备份集合中的日志包含了最低限度的日志变更。时间点恢复是受到限制的。RESTORE会向前滚到日志的结尾,在不需要覆盖数据库的情况下。

  当数据库的设置为使用块日志恢复模型的时候,你可以使用如下命令来完成重新存储:(正如你看到的,这些命令同样也是与数据库使用的是完全或者块日志恢复无关的。)

  RESTORE DATABASE Test FROM DISK='CTest_full.BAK' WITH NORECOVERY

  RESTORE DATABASE Test FROM DISK='C:Test_diff.BAK' WITH NORECOVERY

  RESTORE LOG Test FROM DISK='C:Test_log.TRN' WITH RECOVERY

  你从使用块日志恢复中获得的实际好处是什么?这要看你的环境。如果你使用非常多的块插入语句,在批处理中随时地删除和重新创建索引,那么块日志恢复模型是一条可以走的路。如果你的环境正常,数据并不总是在变化中,完全恢复模型也是更好的选择。当你在做任何选择的时候,一个越简单的道路通常在以后会带来更多的烦恼,所以要明智地选择你的恢复模型,然后计划你的恢复过程。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top