数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下。sql
对于这个问题的最简单的答案是不会:恢复模型不会影响故障恢复,只用简单恢复模式你不会丢失事务。那数据库恢复模型的目的是什么?数据库
你用恢复模型你只告诉SQL Server如何处理事务日志。SQL Server提供下列3个恢复模型:spa
咱们来细谈下。每一个新建的数据库默认是完整恢复模式(在完整数据库备份后!)。完整恢复模式意味着你须要进行按期事务日志备份。在事务日志备份后,SQL Server能够标记VLFs(虚拟日志文件(Vitural Log Files))为不活动,在下个检查点能够重写它们。若是你不进行按期的事务日志备份,SQL Server不能重写VLFs(由于它们仍是活动的),这样的话你的事务日志会增加。日志
增加事务日志很慢(由于须要零值初始化(Zero Initialization))并致使日志碎片(Log Fragmentation)(大量不一样的VLFs)。按期日志备份的另外一个好处是你能够进行所谓的时间点恢复(Point in Time Recovery),即恢复你的数据库到指定的时间点。blog
若是你不在意你的数据(我会被你们笑话的!),你能够把你的数据库恢复模式切换为简单。使用简单恢复模式,你不须要麻烦本身进行平常事务日志备份,由于在检查点(CHECKPOINT)SQL Server会标记VLFs为不活动。若是你没有长时间运行的事务,在这个恢复模式里,你的事务日志不会增加。简单恢复模式的一个反作用就是你不能进行时间点恢复(Point in Time Recovery)。 事务
当你的数据库崩溃或损坏,你只能恢复你的数据库到你最近的完整数据库备份,外加可用的差别备份。在这个状况下你丢失多少数据取决于你最近的完整/差别备份的状况。对于OLTP数据库,我从不推荐简单恢复模式。在数据仓库的情景下倒可使用,由于存储的数据基本不会有啥改变。get
最后SQL Server还提供你大容量日志恢复模式。在SQL Server里,当你运行特定的操做,它们能够是最小化日志(Minimally Logged)(在SQL Server里没有无日志操做!)。若是你用的是大容量日志恢复模式。最小化日志意味着SQL Server不会写各个事务日志记录到事务日志,当你进行这样操做的时候。it
SQL Server只经过所谓的BCM页(大容量修改映射页(Bulk Changed Map Page))标记修改的区为已修改。这样的话,当你进行最小化日志操做时,你的事务日志不会变得那么大。很差的反作用是在那期间(数据库运行在大容量日志恢复模式)你不能进行时间点恢复。所以在这个恢复模式下,你应该尽可能缩短它的时间。例如:当你在运行最小化日志操做的时候,你才把数据库从完整恢复模式切换回大容量日志模式(运行完后切换回完整恢复模式)。io
当你运行在大容量日志恢复模式里,你仍是要进行事务日志备份。但它们的大小不会变小,由于SQL Server复制修改的分区(基于BCM页)到事务日志备份——如你从下图看到的同样。model
故障恢复过程毫不会受恢复模式影响。恢复模式志影响你的事务日志,还有你是否能进行时间点恢复。一般建议你应该使用默认的完整恢复模式加按期事务日志备份。由于用这个方法你能够最小化你的数据丢失。
感谢关注!
https://www.sqlpassion.at/archive/2016/05/23/crash-recovery-recovery-models