故障恢复(数据库)
时间:2022-12-25 06:30:01 | 来源:信息时代
时间:2022-12-25 06:30:01 来源:信息时代
故障恢复 : 将系统恢复到发生故障之前状态的过程。对于数据库系统来讲,由于承载着支撑信息系统的数据管理的重任,其稳定可靠是最重要的,数据库系统应具备很强的抗故障和容错的能力。因此,故障恢复子系统是数据库系统最重要的组成部分之一。
设计故障恢复系统必须从分析故障入手。故障可分为事务级故障、系统级故障和介质级故障。所谓事务级故障是指故障的影响范围被限制在该事务本身。例如,数据库事务中某个操作失败了,这个事务就需要回滚,但是数据库系统还是好的,可以继续运行,这个故障就是事务级的故障。所谓系统级故障是指这个故障导致了整个数据库系统的停止,造成系统中全部事务的终止。例如,数据库代码的异常,操作系统的崩溃,停电事故等就是典型的系统级故障。所谓介质级故障是指保存数据的磁盘介质发生了故障,造成数据库中数据的丢失和损坏。例如,地震、火灾等灾难造成磁盘损毁就是介质级的故障。这几类故障的影响面、发生频率和恢复代价如下:
故障 | 影响面 | 发生频率 | 恢复代价 |
事务级 | 小 | 高 | 小 |
系统级 | 中 | 中 | 中 |
介质级 | 大 | 低 | 大 |
故障恢复的基本思路就是利用数据的“冗余”,也就是当数据库中的部分数据被破坏或者损毁的时候,系统能够从其他冗余存储的数据中重建。但是,冗余是有代价的,会带来性能的下降和成本的增加,因此,故障恢复设计也是一个寻找故障可能带来的损失和增加冗余所带来的成本之间的最佳平衡点的过程。基本的依据就是应用系统对于故障的承受能力。比如,像银行等重要的信息系统,数据库通常要采用异地灾备中心来备份数据。显然这种冗余备份的日常维护代价是很大的,不是普通企业能够承受的。但是,它在灾害发生时给企业带来的好处也是明显的。据媒体报道,遭受美国“911”恐怖袭击而倒塌的世贸大厦里,有一些金融机构在事件的数小时后就恢复了业务,主要就是得益于其完备的数据灾备系统。
因此,故障恢复系统设计时还要考虑对系统可用性(system availability)的要求。评价一个系统的可用性程度,通常采用平均无故障时间以及平均故障恢复时间这两个指标。平均无故障时间是指从上次故障修复开始到本次故障发生之间无故障的时间长度的平均值。平均故障恢复时间是指从故障开始到故障修复为止的时间的平均值,这两个参数是不一样的。在实际应用中经常会使用更综合的一个指标,例如,系统的可靠性可以用若干个“9”来表示(就像黄金的纯度一样),这是指系统在一年的时间里最多可以允许的故障总时间的度量。比如,我们说系统的可靠性达到5个“9”(也就是99999),意思是一年中最多可发生故障的总时间不超过: 一年的总分钟数乘上(1-0.99999)=5.256分钟,也就是在一年中故障总时间不能超过5.256分钟左右。
对于不同的故障类型以及不同的系统可用性要求,采用的数据冗余技术方案是不一样的。对于事务级的故障,主要就是采用日志作为数据冗余存储的方案。对于系统级的故障,如果允许系统有一段时间的停机,也可以采用日志作为数据冗余的方案。如果不允许系统停机,可以采用备份数据库(standby database)的方案,即保持一个具有相同状态的数据库。具体的可以有两种方案: 一是物理备份数据库方案,即每一个主数据库的数据块都有一个对应的备用数据块。可以采用依据重做日志执行重做操作的方法来实现。另一个是逻辑备份数据库方案,即在备份数据库上执行相同的SQL语句。对于介质级的故障,最重要的也是要保持一个数据库备份。
关于数据库备份(也称数据库复制),目前已经发展成为一个相对独立的、在很多领域有应用的技术分支。例如,在移动数据库中,手持终端上的数据其实是主数据库的一个备份,可根据应用需要进行单向或者双向的数据复制(同步)。在分布式数据库系统或者数据网格中,经常采用数据复制来提高系统的整体效率和容错能力。因此,主流数据库厂商都提供独立的数据复制工具选项。