目录
一、数据库恢复概述
DBMS的子恢复系统必须确保故障发生后能够把数据库恢复到某种一致状态,最大限度地降低损失,并将崩溃后的数据库不能使用的时间减小到最小
1.1故障分类
1.1.1事务故障
某个事务在运行过程中由于种种原因未能运行到正常终止而夭折
两种错误导致事务执行失败
- 程序的逻辑错误
- 系统错误
1.1.2系统故障
由于某种原因造成整个系统的正常运行突然停止,致使所有正在运行的事务都以非正常方式终止
产生原因
- 操作系统或 DBMS代码错误
- 操作员操作失误
- 特定类型的硬件错误(CPU故障)
- 突然停电等
1.1.3介质故障
存储数据库的存储设备故障
产生原因
- 磁盘损坏
- 磁头碰撞
- 操作系统的某种潜在错误
- 瞬时强磁场干扰等
1.2恢复的基本思想
在系统正常运行时建立冗余数据,保证有足够的信息可用于故障恢复。故障发生后采取措施,将数据库内容恢复到某个一致性状态,保证事务原子性和持久性
数据库系统主要通过登记日志和数据转储建立冗余数据
利用冗余数据进行故障恢复考虑因素
- 存储器性质
- 事务的更新何时写入数据库
- 缓冲
二、基于日志的恢复技术
2.1日志
日志是日志记录的序列,记录了数据库中所有的更新活动
2.1.1日志记录的格式
一条更新日志记录了一个事务对数据库的一次 write操作,包括
- 事务标识符
- 操作类型
- 操作对象
- 旧值
- 新值
<Ti,start> --事务Ti开始
<Ti,Xj,V1,V2> --事务Ti对 Xj的一次更新,其中 V1是旧值,V2是新值。对于插入,V1为空;对于删除,V2为空
<Ti,commit> --事务Ti正常提交
<Ti,abort> --事务Ti异常终止
2.1.2登记日志的原则
日志记录必须严格按并发事务执行的时间次序登记
必须先记日志,后写数据库
2.1.3 redo和 undo
redo(Ti) 根据日志记录,按登记日志的次序,将事务 Ti每次更新的数据对象的新值用 write操作重新写到数据库(不是重新执行事务 Ti)
undo(Ti) 根据日志记录,按登记日志的相反次序,将事务 Ti每次更新的数据对象的旧值用 write操作写回数据库
redo和 undo都是幂等的,执行多次等价于执行一次
2.2延迟更新技术
延迟更新将事务对数据库的更新推迟到事务提交之后
遵循规则
- 每个事务在到达提交点之前不能更新数据库
- 在一个事务的所有更新操作的日志记录写入稳定存储器之前,该事务不能到达提交点