数据库备份与恢复 之二 备份概述

SQL Server的开发部门一直在致力完善SQL Server的备份恢复功能,希望帮助数据库管理员用最小的代价保证数据安全。所以基本上每个版本在这方面都有功能扩充。丰富的功能带来的一个副作用是,在联机丛书或其他介绍备份恢复的文档里,会看到很多种备份方法,让人有点莫衷一是。它们之间是什么关系呢?这里让我们来梳理一下。

SQL Server数据库分数据文件和日志文件。为了使得数据库能够恢复到某个一致点,备份不仅需要拷贝数据库数据文件里的内容,还要拷贝日志文件里的内容。那么根据每次备份的目标不同,我们可以将备份分为数据备份和日志备份

数据备份的范围可以是完整的数据库、部分数据库、一组文件或文件组。所以根据备份下来的数据文件的范围,又分成了完整数据库备份、文件备份和部分备份。

完整数据库备份

数据库备份就是拷贝下数据库里的所有信息,通过一个单个完整备份,就能将数据库恢复到某个时间点的状态。但是由于数据库备份是一个在线的操作。一个大的完整数据库备份可能需要一个小时甚至更长的时间。数据库在这段时间里还会发生变化。所以完整数据库备份还要对部分事务日志进行备份,以便能够恢复数据库到一个事务一致的状态。

完整数据库备份易于使用。它包含数据库中的所有数据。对于可以快速备份的小数据库而言,最佳方法就是使用完整数据库备份。但是,随着数据库的不断增大,完整备份需花费更多时间才能完成,并且需要更多的存储空间。仅做完整备份可能不能满足用户需求。

文件备份

文件备份指备份一个或多个文件或文件组中的所有数据。在完整恢复模式下,一整套完整文件备份加上跨所有文件备份的日志备份合起来等同于完整数据库备份。使用文件备份能够只还原损坏的文件,而不用还原数据库的其余部分,从而可加快恢复速度。例如,如果数据库由位于不同磁盘上的若干个文件组成,在其中一个磁盘发生故障时,只须还原这个故障磁盘上的文件的备份,其他磁盘上的文件无须还原。这样会缩短还原时间。

部分备份

部分备份与完整数据库备份类似,但是部分备份默认只包含数据库可读写部分,数据库的只读文件将不会被备份。因为只读部分是不会发生变动的,总是去备份它有点浪费。所以部分备份在希望不备份只读文件组时非常有用。

部分备份可以说是数据库备份和文件备份之间的一个中间类型。如果一个数据库里没有只读文件,那么部分备份和数据库备份就没什么差别。

数据库文件常常是非常巨大的。在流行数据集中的趋势下,库容上TB的数据库现在已屡见不鲜。对于这样的一个数据库,做数据库备份,哪怕是文件备份都是一件非常昂贵的事情,可能不是每天都能去做的。在这种背景下,只备份从上次备份以后的差异,就是个必需的技术。

从是否拷贝所有的数据来分,数据备份又可以分完整备份和差异备份。

差异备份基于差异,备份要求数据库之前做过一次完整备份。差异备份仅捕获自该次完整备份后发生更改的数据。这个完整备份被称为差异备份的“基准”。差异备份仅包括建立差异基准后更改的数据。差异备份比差异基准更小且更快,便于执行频繁备份,从而降低了数据丢失的风险。

对于完整数据库备份、文件备份和部分备份这3种数据备份形式,SQL Server都能够做完整备份和差异备份。所以,引出了一共6种数据备份模式:完整数据库备份、完整文件备份完整部分备份,差异数据库备份、差异文件备份差异部分备份

数据备份集中精力于数据文件的备份。对于日志文件,相应地有事务日志备份。每个日志备份都包括创建备份时处于活动状态的部分事务日志,以及先前日志备份中未备份的所有日志记录。不间断的日志备份序列包含数据库的完整(即连续不断的)日志链。在完整恢复模式下(或者在大容量日志恢复模式下的某些时候),连续不断的日志链让您可以将数据库还原到任意时间点。

仅复制备份(Copy-Only)是独立于常规SQL Server备份序列的SQL Server备份。通常,进行备份会更改数据库并影响其后备份的还原序列。但是,有时在不影响数据库全部备份和还原过程的情况下,为特殊目的而进行备份还是有用的。为实现此目的,SQLServer 引入了下列两种仅复制备份:

n   仅复制完整备份

仅复制完整备份也备份整个数据库的内容。它和正常的完整备份的区别是,做完了以后差异备份的基准不会变,因此不影响差异备份序列。

n   仅复制日志备份

仅复制日志备份只备份当前日志文件里现有的内容,但是不会清空日志文件里备份下的日志。因此,下次再做正常日志备份的时候,这些内容还会被再次备份下来,从而不影响常规日志备份的序列。这种备份主要用在以下情况:数据库上已经有了一个备份计划任务在运行,但是现在需要紧急做一个日志备份,但同时不能影响到原有的备份序列。

现在可以总结出SQL Server提供了以下11种主要备份方法(见表9-1)。


9-1  SQL Server提供的11种主要备份方法

分  级

数据备份

日志备份

数据库级

完整数据库备份

仅复制完整数据库备份

差异数据库备份

(一般)
日志备份

仅复制
日志备份

文件级

完整文件备份

仅复制完整文件备份

差异文件备份

部分

完整部分备份

仅复制完整部分备份

差异部分备份

面对这么多的备份方法,到底该怎么制定自己的备份策略呢?让我们先去掉几个不太常用的方法。

首先,仅复制备份这类方法的出现,是为了防止将要做的备份会破坏现有的备份策略。例如,对一个已经建立了严格备份规则(例如Logshipping)的数据库,现在需要做一个日志备份到另一个文件夹里。普通的日志备份会破坏现有备份文件系统所维护的日志链。仅复制备份就不会破坏。这种方法一般只是在偶尔的情况下有目的地使用,不需要在制定备份策略的一开始考虑。

在现实使用中,很少有数据库专门维护一个只读的文件或文件集。(这种方法维护成本较高,只会在非常巨大的数据库上才能体现出优势。)所以部分备份也很少用到。

因此上表可以简化成几个最传统,也是最常用的备份方法(见表9-2)。

9-2  最常用的备份方法

分  级

数据备份

日志备份

数据库级

完整数据库备份

差异数据库备份

(一般)日志备份

文件级

完整文件备份

差异文件备份

顺便想提一句的是,有些用户喜欢用直接拷贝数据库文件,然后用文件附加(Attach)的方式备份和恢复数据库。这种方式一般不推荐,因为:

(1)SQL Server在运行的时候,对文件施加了排他锁,通过一般的方法是不能直接拷贝文件的。除非通过一些备份软件,否则只能停掉SQLServer服务,或者关闭数据库,才能备份文件。

(2)SQL Server在理论上,只保证通过运行sp_detach_db语句得到的数据库文件,才一定能被成功地附加上。如果用户是通过暂停SQL Server服务或其他方法得到的文件,SQLServer不能保证就一定能附加得上。

(3)有些用户只拷贝数据文件,不拷贝日志文件的做法,是非常不规范的。很容易导致数据库不能正常恢复,从而丢失数据。

如果用SQL Server提供的接口做备份恢复,建议还是使用Backup和Restore命令。如果借助第三方软件,要确认其对SQL Server的支持度。

拷贝文件的方法也不是一定不能用。笔者在做灾难恢复的时候,如果数据库不是很大,时间又允许,会先做一个数据库备份,再做一个文件级备份,以期双保险。但是它的前提,是文件拷贝发生在SQLServer被成功关闭后,或者sp_detach_db后。而且所有的文件都要做备份,包括日志文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值