SQL Server数据库备份模式简单来说可以分为完整恢复模式下的备份与简单恢复模式下的备份。两种不同的备份模式各有特点。笔者认为数据库管理员要清楚这两种备份模式的差异,并结合企业的实际情况选择合适的备份模式。笔者在这篇文章中,主要是想和各位专家讨论下一下简单恢复模式下的备份方式的优缺点以及相关的管理要点。就当作抛砖引玉,期待与各位专家共同成长。
一、 简单恢复模式的优点。
简单恢复模式下的备份就如同这个名字一样,管理起来非常简单。因为在简单恢复模式下的备份,始终不会备份事务日志,故管理员来非常的方便。在简单恢复模式下,数据库系统会自动截断事务日志,以删除所有不活动的虚拟日志文件。截断通常发生在每个检查点之后。故不会对数据更新产生不利的影响。当数据库的更新频率比较高时,由于简单恢复模式下的备份方式始终不会备份事务日志,故其备份的效率会比较高。
为此,笔者在数据库设计的时候,由于需要频繁的变更数据库的结构,需要创建新表或者调整相关参数。此时为了节省数据库备份的时间,笔者往往是采用简单恢复模式下的备份。当有重要的变更后,就即使对数据库进行备份。由于备份的时间间隔比较短,故不备份事务日志不会产生多大的负面影响。反而可以提高数据库的备份效率。
二、 简单恢复模式的缺点。
简单恢复模式下的备份最大的缺点就是可能导致最近数据备份之后所做的更新将会全部丢失。如现在有一个SQL Server数据库系统。在今天凌晨1点刚完成一个差异备份。而在上午企业上班的时候,企业用户通过前台客户端在系统中录入了不少的销售订单、采购订单等信息。可是不幸的是,在下午1点的时候数据库突然出现了故障。经检查是因为数据库的硬盘出现了不明原因的损坏。还有数据库管理员采用了异地备份。故马上采用了新硬盘并利用异地备份文件恢复相关的数据。但是由于采用了简单恢复模式下的备份,此时就遇到了一个文件。因为简单恢复下的备份方式不会备份事务日志。故在数据库恢复的时候,只能够恢复到凌晨1点的那个时刻的数据。上午上班员工录入的销售订单、采购订单等信息都无法恢复。此时员工只有重新建立这些信息。
鱼与熊掌不能够兼得。简单恢复模式下的备份方式始终不用备份事务日志,故可以提供能比较快的备份速度。但是也正是因为如此,数据库在遇到故障时需要恢复的话,不能够恢复到故障的那个点上。为此数据库管理员需要权衡利弊,选择一个合适的备份方式。据笔者的个人经验而言,简单恢复模式并不适合用在生产系统上。因为对于大部分生产系统而言,丢失数据库的最新更改很可能用户是无法接受的。因为数据更改丢失很难找回,或者需要花费大量的时间补入。而数据库备份的时间,数据库管理元可以通过备份策略,把数据库备份作业放到晚上进行。此时用户使用数据库比较少,即使备份需要花费几个小时的时间,对用户的影响也不会很大。故对于生产系统而言,特别是更改比较频繁的生产系统,笔者是建议采用完整恢复模式,而不是这篇文章所讲述的简单恢复模式。
三、 简单恢复模式的管理要点。
从上面的分析中,大家可以看出简单恢复模式下的备份具有比较大的局限性。但是毕竟其管理方便、备份效率高,在一些特定的场合还是经常被数据库管理员所采用。现在的问题是,数据库管理员该采取一些怎么样的策略,把这个局限性降低到最低。笔者的做法是,提高差异备份的频率,对简单恢复模式下的备份方法进行补充,从而减少因为没有备份事务日志而造成的数据丢失的风险。
差异备份基于数据的最新完整备份而延伸出来的一种备份策略。这称为差异的基准。差异基准是读、写数据的完整备份。差异备份仅包含自建立差异基准后发生更改的数据。通常,建立基准备份之后很短时间内执行的差异备份比完整备份的基准更小,备份速度也更快。因为差异备份只对上次备份以后的变更数据进行备份。故使用差异备份可以加快进行频繁备份的速度,从而降低数据丢失的风险。通常,一个差异基准会由若干个相继的差异备份使用。还原时,首先还原完整备份,然后再还原最新的差异备份。经过一段时间后,随着数据库的更新,包含在差异备份中的数据量会增加。这使得创建和还原备份的速度变慢。因此,必须重新创建一个完整备份,为另一系列的差异备份提供新的差异基准。可见完全备份与差异备份结合使用,可以有效的降低简单恢复模式下的数据丢失风险。
通常情况下,差异备份所涵盖的数据文件与单个差异基准中所涵盖的文件相同。在简单恢复模式下,一个差异备份只能有一个差异基准。尝试使用多个基准会引发错误,并且备份操作将会失败。不过根据笔者的经验来看,一个差异备份只能有一个差异基准,基本上能够满足企业数据备份的需求。使用多基准差异备份反而会增加数据备份与恢复的难度,容易出错。故无论企业采用的是何种备份模式,笔者都建议用户尽量不要采用多基准差异备份。
可见差异备份与完整备份结合应用,并适当提高差异备份的频率,可以降低因为没有别分事务日志所造成的风险。但是这只能够起到降低的作用,而无法完全避免。如在上午10点时数据库做了一个差异备份。但是到下午1点是数据库出现了损坏。此时如果数据库管理员还原数据库的话,也只能够恢复到上午10点时(差异备份发生时)的数据。而恢复不到下午1点时故障发生时的数据。也就是说,上午十点到下午一点这几个小时中发生的数据变更将会丢失。可见简单恢复模式下的备份方案由于始终没备份事务日志,由此带来的数据损失风险无法避免。对于这一点,数据库管理元一定要铭记于心。
创建 SQL Server 备份的目的是为了可以恢复已损坏的数据库。但是,备份和还原数据必须根据特定环境进行自定义,并且必须使用可用资源。故如果结合数据库资源来考虑,并不能够说简单恢复模式下的备份策略不好。如果企业比较看重备份的速率,而对于数据丢失的风险在一定程度之内可以忍受的话,那么简单恢复模式下的备份策略还是比较适合这种情况的。
四、 简单恢复模式下的备份总结
简单恢复模式下的备份跟完整备份模式或者大容量日志备份模式的差异主要体现在事务日志备份上。简单恢复模式下的备份始终不会对事务日志进行备份,故最新备份之后的更改将不受保护。在发生数据库故障后,这些更改用户必须手工的重新做一遍。即利用备份文件只能够恢复到备份的结尾,而不能够恢复到数据库故障的时点上。而简单完整备份模式下的最大优点是数据库系统会回收日志空间以减少硬盘空间的需求,或者说数据库管理元不需要再管理事务日志空间。同时其进行数据库备份的时间也会大大缩短。