SQL Server数据库可以工作在三种不同的Recovery mode下。不同的Recovery mode决定了可能的数据丢失程度。SQL Server使用transaction-log来记录用户对数据的所有操作(包括DML和DDL,另外log中还有一些数据库自动发生的事件,但不包含查询语句)。因此当发生事务回滚等情况时,SQL Server通过transaction-log中记录的数据来回滚,其方式是执行log中记录操作的逆操作。另外Tlog在备份恢复,自动前滚和回滚中也有重要作用。
因此各个Recovery mode的区别本质就是在transaction-log中记录的数据内容的差别。
Full Mode
即事无巨细的在transaction-log中记录所有对数据有影响的操作,即所有的DML和DDL。在该模式下,为了防止log中的数据丢失,数据库不能自动删除或重利用log文件中的空间,即使当前事务已经完成,也不可以。
只有备份trancsation log,即log中的数据有保障之后,SQL server才能重新利用(truncate)log中的空间。因此在该模式下,TLog中的数据会持续增长,需要定时备份transation log来防止log增长的过大。如果log已经占用了过大空间则需要备份后(或手工truncate后),手工shink数据库。
Simple mode
The “Simple” recovery model is the most basic recovery model for SQL Server. Every transaction is still written to the transaction log, but once the transaction is complete and the data has been written to the data