文章目录
数据库的故障恢复涉及到了如何保证数据库事务的原子性和持久性问题!
一、数据库的故障
(一)、故障分类
-
事务故障
某程序(事务)自身运行错误引起的故障;
-
系统故障
由掉电、非正常关机等引起的故障;
-
介质故障
由介质损坏引起的错误;
(二)、故障恢复的宏观思路
故障恢复即:将DB由当前不正确的状态恢复到已知为正确的某一状态;
故障恢复即保证数据库事务的:
(1)原子性:即事务的所有操作,要么全执行,要么全部不执行;
(2)持久性;已经提交的事务要对数据库产生持久性的影响;而未提交的事务对数据库不应由影响;
-
事务故障恢复
事务的故障恢复可以通过:重做事务(Redo)和撤销事务(Undo)两种方式来恢复;
Redo可保证已提交事务的持久性;而Undo可以消除未提交事务的影响;
-
系统故障恢复
1、系统故障可通过运行日志来进行恢复:
(1)运行日志是DBMS维护的一个文件,以流水的方式记录事务对数据库的每一次操作以及操作顺序;
(2)运行日志是直接写入到存储介质中的,保持正确性;
(3)事务对数据库进行操作的时候:首先写运行日志;成功后再与数据库缓冲区交换数据信息;
2、当出现系统故障时,按照运行日志记录的事务操作顺序来重做故障发生时已经结束的事务,同时也要撤销那些在故障发生时还未结束的事务;
3、发生故障时,应该从哪个时间点来恢复?检查点;
(1)检查点:在该时刻,DBMS强制使内存缓冲区中更新的全部内容写回到磁盘数据库中;
(2)DBMS在运行日志中要定期更新检查点