数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段。一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源。
1.1. 准备工作
在制订数据备份方案前,我们首先对要对现实情况做一个具体的调查,这样制订出来的方案才是合理且有效的。一般,我们需要了解如下内容:
l 数据丢失的允许程度?
l 允许的故障处理时间?
l 业务处理的频繁程度?
l 服务器的工作负荷?
l 可接受的备份/恢复处理技术难度?
l 数据库的大小?
l 数据库大小的增长速度?
l 那些表中的数据变化是频繁的,那些表中的数据是相对固定的?
l 那些表中的数据是很重要的,不允许丢失的,那些表中的数据是允许丢失一部分的?
l 什么时候大量使用数据库,导致频繁的插入和更新操作?
l 现有的数据库备份资源(磁盘、磁带、光盘)有哪些?
l 有无可能为数据库备份投入新的设备或资金?
1.2. 备份方法
了解现状后,我们再看看SQL Server提供给我们的备份方法,SQL Server一共给我们提高了四种数据库备份的方法:
1.2.1. 完全备份
这种备份会备份数据库中所有的数据。因此,它生成的备份文件大小和备份时间是由数据库中,数据的容量决定的。还原的时候,可以直接从备份文件还原到备份时的状态,不需要其他文件的支持,还原过程最简单;
1.2.2. 差异备份
备份自上次完全备份后,发生了更改的数据。差异备份是备份发生了更改的数据,因此在做差异备份前,必须至少有一次完全备份。而还原的时候,也必须先还先还原差异备份前一次的完全备份,才能在此基础上进行差异备份数据的还原。这种备份生成的备份文件大小和备份需要的时间,取决于自上次完全备份后,数据库的数据变化情况,相对于完全备份来说,它生成的备份文件较小,备份时间较短,对SQL Server服务性能的影响也较小;但它的还原过程相对麻烦一点,必须对应它之前的完全备份才能成功还原;
1.2.3. 日志备份
备份是自上次备份后对数据库执行的所有事务的一系列记录,这个上次备份,可以是完全备份、差异备份、日志备份,但日志备份前,至少有一次完全备份。还原的时候,必须先还原完全备份,再还原差异备份(如果有的话),再按照日志备份的先后顺序,依次还原各次日志备份的内容;这种备份生成的备份文件最小,需要的时间也最短,对SQL Server服务性能的影响也最小,适宜于经常备份。但是很显然地,它的还原过程是最麻烦的,不但要对应它之前做的完全备份和差异备份(如果有的话),还要注意还原的顺序;
1.2.4. 文件和文件组备份
可以备份和还原数据库中的个别文件或文件组。这种备份方法平常使用的机率比较少,常常用于对重要数据的备份。它要求在数据库设计时,就做好考虑,把需要单独做特别备份的表进行分组,给它们分配不同的文件组(表只能放在文件组上,不能放在具体的文件上,一个文件组可以是一个文件或多个文件),这样才能在做备份的时候,单独备份这些数据。这种的备份的处理技术难度相对来说比较高,不但要掌握备份/还原的方法,还必须对数据库结构和数据库中的各表数据情况掌握得比较好。
1.3. 备份方案制订策略
有了上面的资料,我们就可以根据我们的实际情况来选择合适的备份方法了。一般的,我们在制订备份方案的时候,可以按照下面的策略:
l 数据库备份能保障在数据丢失的情况下,能恢复重要数据,因此,在数据库中的数据发生变化后,要及时对重要的数据进行备份。
l 数据备份,要求不能影响业务处理的正常进行,因此,数据备份要采用多种备份方法并用,将完全备份这类占用服务资源高的备份设置在业务处理的空闲时间段,而将日志备份这类占用服务资源少的备份方法应用在业务处理的高峰,但却需要及时备份的时候;
l 充分考虑故障出现时,业务处理可以接受的停机时间,不同的备份方法,需要的还原时间不同,因此,在照顾备份对业务处理影响的同时,要考虑还原的时间,不能因为完全备份对业务处理影响很大,就几个月才做一次,这样的话,在还原的时候花费的时间就很长了;
l 考虑公司的技术力量,尽量避免采用超过公司掌握的技术程序的备份处理方法;
l 用效利用备份资源,要根据公司目前具备的备份资源,合理地使用上述四种备份方法进行备份,同时要考虑过期备份文件的清除和备份资源的再利用问题;
l 要考虑灾难性数据丢失造成的影响。对于重要的数据,要将数据库备份到多种介质和多个地方,这样一处备份损坏了,还有其他的备份可用。
1.4. 备份方案的实施
数据库备份是一个周期性的工作,因此我们应该让SQL Server按照我们制订的备份方案,自动地完成各种备份,而不要我们手工来进行日常的备份处理。
在SQL Server中,要定时执行某项操作,是由SQL Agent服务来完成的,因此,要让我们的备份方案能自动完成的话,首先我们要把SQL Agent服务设置为自动启动(需要注意的是,win98/winme这类的操作系统是无法设置SQLSERVERAGENT自动启动的),设置方法:
我的电脑à控制面板à管理工具à服务à鼠标右键SQLSERVERAGENT
à属性à启动类型à选择“自动启动”à确定
在SQL Server中,我们可以通过下面几种方法来定义我们的数据库备份:
1. 数据库维护计划:这里可以定义完全备份和日志备份的自动备份作业。定义方法:
企业管理器à管理à右键数据库维护计划à新建维护计划
à[下一步]à选择你要备份的数据库
à[下一步]à直到“指定数据库备份计划”这项
à然后按照向导提示进行设置就行了
2. 数据库备份:这里可以根据我们的备份方式制订各种数据库备份作业。定义方法:
企业管理器à鼠标右键你要备份的数据库à所有任务à备份数据库
à在[备份]项中选择数据库和备份方式
à在[目的 ]à[备份到]项中,按[添加]按钮,添加备份文件
à在[调度]项中,勾选“调度”,并点…按钮设置备份的时间安排
à确定
3. 作业:上述两种方法,最终设置的结果都是一个作业(JOB)调度,因此,我们也可以通过直接创建作业,由作业定时调用备份处理的语句来实现自动备份。定义方法:
企业管理器àSQL Server代理à右键作业à新建作业
à[常规]项中输入作业名称
à[步骤]项à新建à输入步骤名
à[类型]中选择"Transact-SQL 脚本(TSQL)"
à[命令]中输入备份处理的SQL语句
à[调度]项中,设置你的备份时间计划
具体的SQL备份语句,参考SQL联机丛书上的相关部分,这里不做说明。