【数据库概论】10.2 数据库故障和恢复

10.2 数据库故障种类

尽管数据库系统采取了各种保护措施防止数据库的安全性和完整性被迫换,但是计算机系统中的硬件故障、软件错误、操作员的失误以及恶意破坏依然是无法避免的。因此数据库管理系统需要有吧数据库从错误状态恢复到某一已知的妆却状态的功能,这就是数据库恢复功能。

故障的种类

1. 事务内部的故障

事务内部的故障有的是可以被发现的,比如银行系统中账户余额小于取出金额,有的是非预期的,不能由事务程序处理。

事务内部更多的故障是非预期的,不能由应用程序处理,也就是ROOLBACK是无法解决的,比如说运算到某一处,并发事务发生死锁而被撤销,违反了某些完整性限制而被终止。事务故障意味着事务没有达到COMMIT或者显示ROLLBACK,因此数据库可能处于不正确状态。恢复程序会在不影响其他事务运行的情况下,强行回滚该事务,这类恢复操作称为事务撤销(UNDO)

2.系统故障

系统故障时止造成系统停止运转的任何时间,使得系统要重新启动。比如特定类型的硬件错误、操作系统故障、DBMS代码错误等。恢复子系统必须在系统重新启动的时候让所有非正常终止的事务回滚,强行撤销所有未完成事务。

另一方面,在发生故障时有一些已完成的事务可能有一部分留在了缓冲区,尚未写回到磁盘上的物理数据库中,系统故障清空了缓冲区,使得这些事务对数据库的修改丢失,因此在系统重启后,出了撤销所有未完成事务外,还需要**重做(REDO)**所有已提交事务,将数据库恢复到一致状态。

3.介质故障

介质故障称为硬故障,比如磁盘损坏、瞬时强磁场干扰等等。可能性小但是破坏性最大。在DBMS层面几乎束手无策,需要依赖较为偏向硬件的手段,比如冗余编码、校验码、RAID技术等。

4.计算机病毒

总结:
各类故障对数据库的影响有两种可能性,一个是数据库本身的破坏,另外一种是数据不正确
数据库恢复对基本原理是冗余。数据库中任意一部分被破坏或者不中却都可以根据存储在系统中别处的冗余数据来重建。甚至为了防止物理媒介被直接破坏(人为破坏、火灾或地震),会采用多个地点部署分布式的冗余系统,来进行异地容灾。

10.3 恢复的实现技术

建立冗余数据最常用的技术是数据转储和登记日志文件。

数据转储

数据库恢复采用的基本技术,数据库管理员定期将整个数据库复制到其他存储介质上保存起来,作为后备副本。

转储十分耗费时间和资源,不能频繁进行,DBA应该根据数据库使用情况确定一个适当的转储周期。

转储可以分为静态转储和动态转储:

静态转储是在系统中无运行事务时进行的转储操作,转储操作开始的时刻数据库处于一致性状态,转储期间不对数据库进行任何存取活动。这降低了数据库的可用性。

动态转储是指转储期间允许对数据库进行存取或者修改。但是转储结束时的后备副本不能保证正确有效。为了保证动态转储的数据的一致性,我们需要将转储期间各个事务对数据库的修改记录下来,建立日志文件,这样,后备副本加上日志文件就能将数据库恢复到某一时刻都正确状态了。

另外还可以分为海量转储和增量转储,海量转储就是转储数据库的所有信息,而增量转储只是转储一些更新过的数据

登记日志文件

1.日志文件的格式和内容

日志文件是用来记录事务对数据库的更新操作的文件。日志文件主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。以记录为单位的日志文件内容主要包括:各个事务开始的标记、各个事务结束的标记、各个事务所有更新操作

2.日志文件的作用

  • 事务故障恢复和系统故障恢复必须用到日志文件。
  • 在动态转储方式中必须建立日志文件,后备副本和日志结合起来才能恢复数据库
  • 静态转储中建立日志文件,数据库毁坏后可重新装入后援副本,然后再通过日志文件将已完成的事务进行重做处理,故障发生时未完成的进行撤销处理。

3.登记日志文件

为了保证数据库是可恢复的,登记日志文件时需要遵循两条原则:

  • 登记的次序严格按照并发事务执行的时间次序
  • 必须先写日志文件后写数据库

因为如果先写数据库,可能在完成数据库操作后发生故障,就无法再完成写日志操作了,数据库就会丢失对本次操作的记录。

10.5 恢复策略

事务故障恢复

在这里插入图片描述

系统故障的恢复

在这里插入图片描述
在这里插入图片描述

介质故障的恢复

恢复方法其实就是重装数据库,然后重做已完成的事务

  1. 装入最新的数据库后备副本,是数据库恢复到最近一次转储的一致性状态
  2. 装入相应的日志文件副本,重做已完成的事务

10.6 具有检查点的恢复技术

如果在恢复的时候检查所有日志记录,会有两个问题:一个是检索所有日志会耗费大量时间,二是很多需要重做处理的事务实际上已经将他们的更新操作结果卸载了数据库中,然而恢复子系统有重复了这些操作,浪费了大量时间。为了劫掠这些问题,在日志文件中增加了一类新的记录+检查点记录,是的恢复子系统在登陆日志文件期间动态维护日志。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值