简单恢复模式下,从最近一次备份到当前的数据都会存在丢失的风险。而完整备份模式使得数据丢失的风险大大减少。而实际上,生产中也多采用完整恢复模式来保证数据的安全性。下面,小D着重介绍下完整恢复模式下数据恢复中日志的作用。
在简单恢复模式下,日志几乎是不用进行管理的。每一次CheckPoint都有可能截断日志,从而来回收不活动的VLF以便重复利用空间。因此在简单恢复模式下,日志的空间使用几乎可以不去考虑。与之相反,在完整恢复模式下,日志作为恢复数据的重要组成部分,日志的管理和对日志空间使用的管理则需要重视。
完整恢复模式通过将对数据库的任何修改记录到日志来给予数据最大程度的保护,可以使数据恢复到在日志范围内的任何时间点。在完整恢复模式下,CheckPoint不会截断日志。只有对日志的备份才会截断日志。因此日志备份的目的主要有两个:减少活动日志的大小及减少日志损坏的风险。
从日志恢复数据的原理是Redo,也就是将日志中记载的事务再重做一遍。这个开销和从完整或差异备份中恢复相比,要大很多。因此尽可能的减少利用日志的恢复量,而使用完整或者差异备份来恢复更多的数据。
恢复次序
从备份恢复数据需要经历如下几步骤:
- 1.复制数据阶段:从完整备份和差异备份中将数据,索引页和日志复制到被恢复数据库文件。
- 2.Redo(Roll Forward)阶段:将记录在日志中的事务应用到从备份中复制过来的数据。使数据Roll Forward到指定的时间点。这个阶段完成后,数据库还处于不可使用状态(Restoring)。
- 3.Undo(Roll Back)阶段:这也是传说中的Recovery,将任何未提交的事务回滚。这个阶段过后,数据库处于可用状态,任何后续备份将不能接着应用到当前数据库。因此,微软推荐的最佳实践是使用
NoRecovery
选项不进行Undo阶段,而是在所有备份恢复后单独进行Undo阶段,这个操作可以通过还原日志尾部时指定Recovery
选项进行。