SQL SERVER 2005 以后三种恢复模式: 简单(Sample),完全(Full),大批量(Bulk_Logged)
完全备份模型
完全备份模式是指在出现数据文件毁坏时丢失数据的风险最小。如果一个数据库在此模式下是,所有操作都会被完全记录下来,这意味着记录使用INSERT操作增加的每一行,使用DELETE操作删除的每一行和使用UPDATE操作修改的每一行,SQL server还会将使用BCP和BULK insert 操作插入的每一行完全被记录到事物日志中。如果遇到一个数据库备份之后一直在做着定期事务日志备份,那么我们就可以将数据库恢复到最后的日志备份之前任何一个时间点的状态。另外,如果在数据文件出故障之后有日志文件可用,那么我们可以将DB恢复到故障前已提交的最后一个日志的状态。SQL SERVER2005以后也支持一个成为日志标识(LOG MARKS)的特性,这允许我们在事务日志中放置一些参照点。如果数据是在完全恢复模式下,我们可以选择恢复某个日志标志时的状态。
在完全恢复模式下,SQL SERVER 也会完全记录CREATE INDDEX 操作,当从包含创建索引的事务日志备份中恢复时,由于索引不必重建,恢复操作会进行的非常迅速---所有的索引页都已经作为数据库备份的一部分被获取。在SQL SERVER 2000之前sql server只记录一个所有已经被创建的事实,这样一来当我们从日志文件备份中恢复时,整个索引将会不得不重新建立。
看起来完全恢复模式是最好的,但是这是要付出其他的代价的。其中最大的待机就是事务日志会相当的大。
大批量恢复模型(BULK Logged)
大批量恢复模式允许我们在出现介质故障时完全地还原数据库,它还能够对某些大批量操作提供最佳的性能和最小的日志使用空间。这些大批量操作包含 BULK INSERT, BCP, CREATE INDEX, SELECT INTO, WRITETEXT 和UPdatetext。对完全恢复模式,这些操作是完全被记录的,但是对大批量恢复模式,对它们的记录是最小量的。
当执行大批量操作中的某一种操作时,SQL SERVER 只会记录该操作曾经发生过和关于该操作分配空间的信息。但是因为SQL SERVER跟踪了该大批量操作实际上修改了那些区,所以该操作还是可以完全恢复的。在数据库中的每一个数据我那件都至少有一个成为大批量更改地图(BULK CHANGE MPA, BCM)的页面,SQL SERVER对该页面的管理类似 GAM SGAM的管理。
因为能够最小量的记录大批量的操作,所以这些操作能够比在完全备份模式时执行的要快的很多。在正确的BCM页面设置各个标志位需要一些开销,但是与记录每一个对数据和索引的单独更改相比,翻转这些位的开销要小的多。
如果数据库在bulk logged模式下并且没有实际执行任何大批量操作,以为该日志将会包含数据库所有改变的完整顺序记录,所以我们能够将数据库还原到任一个时间点或者命名日志标识。
在备份日志期间会有些开销,除了将事务日志的内容复制到备份介质,SQL SERVER会扫描BCM页面并在备份事务日志的同时备份所以修改过的区。日志文件自身会保持很小,但是该日志的备份可能会比日志文件大上很多倍,所以日志备份需要更多的时间并且可能会比FULL模式消耗更多的空间。还原一个在大批量模式所做的日志备份所消耗的时间与还原一个在FULL模式下所做的日志备份用的时间基本相同。还原过程不需要重做各个操作,恢复所有数据和索引结构所需要的信息都包含在日志备份中。
简单恢复模型(Sample)
简单恢复模型(Sample)
简单恢复模型提供了最简单的备份----恢复策略。每当有检查点发生时(检查点会定时地,经常地发生),事务日志都会被阶段。因此,所能进行备份的备份类型就是那些不需要日志备份的类型。这些类型的备份有完全备份数据库备份,增量备份,部分完全备份,部分增量备份和针对只读文件组的文件组备份。在简单恢复模式下如果试图进行日志备份,那么会收到错误信息,因为该模式的备份不需要日志的,一旦它所包含的所有事务被提交或者回滚,该日志的各部分就能够被重新利用,并且服务器或者事物出现故障时恢复也不需要这些事物信息。事实上,一旦数据库改变到简单模式下,日志就会被截断。
需要注意:简单模式不是不记录日志。所谓的“简单”是我们的备份策略不需要担心日志备份,虽然单个的日志记录并不如在完全备份模式下的,但是在简单模式下是的所有操作都会被记录。因为在大批量恢复模式中谈论的大批量操作在这里也会以最小量记录,所以简单模式下一个数据库的日志可能没有完全模式下的日志增长那么快那么多。这并不是说在简单模式下我们就不用关系日志文件的大小。就像在任何恢复模式中一样,活动食物的日志记录无法被截断并且在最老的活动食物之后开始的所有事物的日志记录都不能被截断。所以,如果有大型或者长时间的事务,仍然会需要大量日志空间。