本章包括:
备份与恢复的介绍
备份的类型
恢复的模式
如何备份数据库
如何还原数据库
备份设备的管理
自动备份
一个数据库管理员,为了保证数据库里的数据万无一失,必须要定期对数据库进行备份,一旦数据库出现了问题,可以从备份的文件里最大程度地还原数据。
18.1 备份与恢复简介
相信大多数人都会同意数据库里的数据要比数据库本身要重要得多,但是因为种种原因,如磁盘故障、计算机硬件故障、用户操作失误等,都有可能会损坏数据。为了保证在发生这些意外的时候可以最大限度地挽救数据,数据库管理员必须要经常备份数据库里的数据。SQL Server 2005提供了强大的备份和还原的功能。
18.1.1 备份类型
SQL Server 2005提供了四种备份数据库的方式:
l 完整备份:备份整个数据库的所有内容,包括事务日志。该备份类型需要比较大的存储空间来存储备份文件,备份时间也比较长,在还原数据时,也只要还原一个备份文件。
l 差异备份:是完整备份的补充,差异备份只备份上次完整备份后更改的数据。相对完整备份来说,差异备份的数据量比完整数据备份小,备份的速度也比完整备份要快。因此,差异备份通常作为经常用到的备份。在还原数据时,要先还原前一次做的完整备份后再还原最后一次所做的差异备份,这样才能让数据库里的数据恢复到与最后一次差异备份时的相同内容。
l 事务日志备份:事务日志备份只备份事务日志里的内容。事务日志记录了上一次完整备份或事务日志备份后数据库的所有变动过程。事务日志记录的是某一段时间内的数据库变动情况,因此在做事务日志备份之前,也必须要做完整备份。与差异备份类似,事务日志备份的备份文件和时间都会比较小,但是在还原数据时,除了先要还原完整备份之外,还要依次还原每个事务日志备份,而不是只还原最近一个事务日志备份。
l 文件和文件组备份:如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式。使用文件和文件组备份方式可以只备份数据库中的某些文件,该备份方式在数据库文件非常庞大的时候十分有效,由于每次只备份一个或几个文件或文件组,可以分多次来备份数据库,避免大型数据库备份的时间过长。另外,由于文件和文件组备份只备份其中一个或多个数据文件,那么当数据库里的某个或某些文件损坏时,可以只还原损坏的文件或文件组备份即可。
完整备份可能比较好理解,例如说,在2006年1月1日早上8点进行了完整备份,那么将来在还原时,就可以恢复到2006年1月1日早上8点时的数据库状态。
差异备份是备份完整备份后的数据变动情况。例如在2006年1月1日早上8点进行了完整备份后,在1月2日和1月3日又进行差异备份,那么在1月2日的差异备份里记录的是从1月1日到1月2日这一段时间里的数据变动情况;而在1月3日的差异备份里记录的是从1月1日到1月3日之一段时间里的数据变动情况。因此,如果要还原到1月3日的数据,只要先还原1月1日做的完整备份,再还原1月3日做的差异备份就可以了。
事务日志备份是以事务日志文件作为备份对象,相当于将数据库里的每一个操作都记录下来了。假设在2006年1月1日早上8点进行了完整备份后,到1月2日早上8点为止,数据库里的数据变动了一百次,如果此时做了差异备份,那么差异备份记录的是第一百次数据变动后的数据库状态,而如果此时做了事务日志备份,备份的将是这一百次的数据变动情况。
再举一个例子,例如在2006年1月1日早上8点进行了完整备份后,在1月2日和1月3日又进行事务日志备份,那么在1月2日的事务日志备份里记录的是从1月1日到1月2日这一段时间里的数据变动情况;而在1月3日的事务日志备份里记录的是从1月2日到1月3日之一段时间里的数据变动情况。因此,如果要还原到1月3日的数据,只要先还原1月1日做的完整备份,再还原1月2日做的事务日志备份,最后还要还原1月3日所做的事务日志备份。
18.1.2 恢复模式
前面章节里多次提到过事务日志,每次提到事务日志时,都会说事务日志会记录数据库中每一次的数据变动。事实上并不是所有数据库都需要记录每一次的数据操作。如果每个操作都要记录的话,数据库不但要写数据文件,而且还要写日志文件,在操作大量数据时(如导入数据),会降低数据库的性能。在SQL Server 2005可以使用“恢复模式”来设置事务日志的操作方法。SQL Server 2005中的恢复模式分为以下三种:
l 完整恢复模式:在该恢复模式下,SQL Server 2005会完整记录下操作数据库的每一个步骤。通常来说,对数据可靠性要求比较的数据库需要使用该恢复模式,如银行、邮电等部门的数据库系统,任何事务日志都是必不可少的。该恢复模式也是SQL Server 2005默认的恢复模式。使用完整恢复模式可以将整个数据库恢复到一个特定的时间点。是这个时间点可以是最近一次可用的备份、一个特定的日期和时间或标记的事务。在该模式下应该定期做事务日志备份,否则日志文件将会变得很大。
l 大容量日志恢复模式:是对完整恢复模式的补充。在该恢复模式下,只对大容量操作(如导入数据、select into等操作)进行最小记录,在保护大容量操作不受媒体故障的危害下,提供最佳性能并占用最小日志空间。例如一次在数据库中插入数十万条记录时,在完整恢复模式下每一个插入记录的动作都会记录在日志中,那么数十万条记录将会使日志文件变得非常大。在大容量日志恢复模式下,只记录必要的操作,不记录所有日志,这么一来,可以大大提高数据的性能,但是由于日志不完整,一旦出现问题,数据将有可能无法恢复。因此,一般只有在需要进行大量数据操作时才将恢复模式改为大容量日志恢复模式,将数据处理完毕之后,马上恢复到完整恢复模式。
l 简单恢复模式:在该模式下,数据库会自动把不活动的日志删除。因此简化了备份的还原,但是因为没有事务日志备份,所以不能恢复到失败的时间点。通常只有在对数据库数据安全要求不太高的数据库中使用。在该模式下数据库只能做完整备份和差异备份。
在SQL Server Management Studio里设置恢复模式的方法如下:
(1)启动【SQL Server Management Studio】,在【对象资源管理器】窗口里展开树型目录,定位到要设置恢复模式的数据库上。
(2)右击数据库名,在弹出的快捷菜单里选择【属性】选项,在弹出的【数据库属性】对话框里选择【选项】标签。
(3)在如图18.1所示对话框中的【恢复模式】下拉列表框里可以选择恢复模式。
(4)选择完毕后,单击【确定】按钮完成操作。