文章目录
- 1.数据库的故障类型以及其影响
- 2.数据库故障恢复的宏观思路
- 3.小结
1.数据库的故障类型以及其影响
DBMS的运行方式
- DBMS利用内存(主存)和外存(辅存)这样的存储体系来进行数据库管理
- 在内存中, 又将其分为程序数据(事务数据)和系统数据
事务 - 事务是DBMS对数据库进行控制的基本逻辑单元。
- 事务:宏观上是由程序员设置的一条或多条SQL语句的一次执行;
微观上是对数据元素的一系列基本操作,如读写等。需要提交和撤销。 - 数据元素:
DBMS一般以磁盘块为数据元素进行处理
通常 1 数据元素 = 1 磁盘块/内存页
也可以更小 (=1 记录)或更大 (=1 关系) - 事务具有四个特性: ACID特性
原子性Atomicity
一致性Consistency
隔离性Isolation
持久性Durability - 故障恢复涉及到如何保证原子性和持久性
数据库的故障及其影响
- 事务故障
某一个程序(事务)自身运行错误所引起的故障
影响该程序(事务)本身 - 系统故障
由于掉电、非正常关机等所引起的故障
影响正在运行的事务以及数据库缓冲区, 数据库缓冲区将涉及正在运行和已经运行的事务 - 介质故障
由于介质损坏等所引起的故障
影响是全面的,既影响内存中的数据, 又影响介质中存储的数据
2.数据库故障恢复的宏观思路
- 数据库故障恢复
把DB由当前不正确状态恢复到已知为正确的某一状态。
需要保证事务的:
原子性:事务的所有操作,要么全都执行,要么全都不执行。
持久性:已提交的事务对数据库产生的影响是持久的,未提交的事务对数据库不应有影响。 - 事务故障的恢复
事务故障可通过重做事务(Redo)和撤消事务(Undo)来恢复。
重做事务可保证已提交事务的持久性,而撤销事务则消除未提交事务的影响
系统故障恢复
- 运行日志(System Log)
运行日志是DBMS维护的一个文件,该文件以流水方式记录了每一个事务对数据库的每一次操作及操作顺序
运行日志直接写入介质存储上,会保持正确性
当事务对数据库进行操作时:先写运行日志;
写成功后,再与数据库缓冲区进行信息交换 - 系统故障可通过运行日志来恢复
按照运行日志记录的事务操作顺序重做事务(当事务在发生故障时已正确结束)或撤消事务(当事务在发生故障时未结束) - 但故障恢复是需要时间的
运行日志保留了若干天的记录,当发生系统故障时应从哪一个点开始恢复呢? - DBMS在运行日志中定期的设置和更新检查点(checkpoint)
检查点是这样的时刻: 在该时刻, DBMS强制使内存DB Buffer中的内容与介质DB中的内容保持一致,即将DB Buffer更新的所有内容写回DB中;
检查点表征了:在检查点之前内存中数据与介质中数据是保持一致的 - 系统故障的恢复
检查点之前结束的事务不需要恢复(已经写回DB)
检查点之后结束或发生的事务需要依据运行日志进行恢复(不能确定是否写回DB):
故障点前结束的重做,故障点时刻未结束的撤消 - 介质故障恢复
- 副本(Copy)
在某一时刻,对数据库在其他介质存储上产生的另一份等同记录
用副本替换被损坏的数据库 - 介质故障的恢复
用副本替换被破坏的数据库
由于介质故障影响全面, 在用副本恢复后还需要依据运行日志进行恢复 - 如何确定备份的时刻: 转储点
过频,影响系统工作效率;过疏,会造成运行日志过大,也影响系统运行性能
备份转储周期与运行日志的大小密切相关,应注意防止衔接不畅而引起的漏洞
3.小结
三种类型故障: 事务故障、 系统故障和介质故障
三种恢复手段: 事务的撤消与重做, 运行日志和备份
两个重要时刻: 检查点和转储点