SQL Server数据库有三种恢复模式:完整恢复模式、简单恢复模式和大容量日志恢复模式:
- 1 Full 完整恢复模式
Full模式的旧称叫”Checkpoint without truncate log“,也就是SQL Server不主动截断日志,只有备份日志之后,才可以截断日志,否则日志文件会一直增大,直到撑爆硬盘,因此需要部署一个job定时备份日志。Full模式提供最高级别的数据保护,可以利用事务日志将数据库还原到以前的任一时间点。缺点就是DBA需要维护定时日志备份任务。
特点
对于任何数据修改操作总是记录详细的事务日志
事务日志不会自动截断(前提是数据库至少执行过一次完整备份)
允许备份事务日志
数据库镜像、AlwaysOn可用性组等功能要求数据库使用完全恢复模式
- 2 Simple 简单恢复模式
和Full模式相反,Simple模式的旧称叫”Checkpoint with truncate log“,其实这个名字更形象,在Simple模式下,SQL Server会在每次checkpoint或backup之后自动截断日志,也就是丢弃所有的不活动日志记录,仅保留用于实例启动时自动发生的实例恢复所需的少量日志,这样做的好处是日志文件非常小,不需要DBA去维护、备份日志,但坏处也是显而易见的,就是一旦数据库出现异常,需要恢复时,最多只能恢复到上一次的备份,无法恢复到最近可用状态,因为日志丢失了。
特点
对于普通数据修改操作记录详细的事务日志,对于大容量类型的数据修改操作只在日志中记录简单的数据页分配信息(例如:BULK INSERT, INDEX CREATE, INDEX REBUILD等)
数据库的维护较简单,事务日志会自动截断
不允许备份事务日志
如果需要压缩数据库日志(Shrink),将数据库模式切换到简单恢复模式后压缩率才是最高的,如果你的数据库在完整恢复模式或大容量日志恢复模式下采用日志压缩,压缩后的日志大小并不会很理想。
- 3 Bulk-logged 大容量日志恢复模式
Bulk-logged模式和Full模式类似,唯一的不同是针对以下bulk操作,会产生尽量少的log: - Bulk load operations (bcp and BULK INSERT)
- SELECT INTO
- Create/drop/rebuild index
众所周知,通常bulk操作会产生大量的日志,对SQL Server的性能有较大影响,bulk-logged模式的作用就在于降低这种性能影响,并防止日志文件过分增长,但是它的问题是无法point-in-time恢复到包含bulk-logged record的这段时间。
Bulk-logged模式的最佳实践方案是在做bulk操作之前切换到Bulk-logged,在bulk操作结束之后马上切换回Full模式。有些类似于Oracle中的nologging属性。
特点
对于普通数据修改操作记录详细的事务日志,对于大容量类型的数据修改操作只在日志中记录简单的数据页分配信息
事务日志不会自动截断
允许备份事务日志,但日志备份的过程需要利用数据页