
第七章 恢复系统.ppt
54页第七章第七章 恢复系统恢复系统 因为有故障,才需要恢复计算机可能发生的故障:电源、软件、机房失火、人为破坏等恢复机制是数据库系统必不可少的组成部分,一旦故障发生,数据库必须保持事务的原子性和持久性 7..1 故障分类故障分类 7..2 存贮器结构存贮器结构 7..3 恢复与原子性恢复与原子性 7..4 基于日志的恢复基于日志的恢复 7..5 影子分页影子分页 7..8 非易失性存储器数据的恢复非易失性存储器数据的恢复7..9 高级恢复技术高级恢复技术7..7 缓冲区管理缓冲区管理7..6 并发事务的恢复并发事务的恢复7..1 故障分类故障分类1 .事务故障: a. 逻辑错误事务由于某些内部条件而无法继续正常执行如:非法输入、找不到数据、溢出等 b.系统错误系统进入一种不良状态(如死锁),结果事务无法正常执行2 .系统崩溃:硬件故障,或数据库软件、操作系统漏洞,导致易失性存储器内容的丢失,并使得事务处理终止而非易失存储器完好 3 .磁盘故障:在数据传送操作过程中由于磁头损坏或故障造成磁盘上数据的丢失 恢复算法:①在正常事务处理时采取的措施,保证有 足够的信息可用于故障恢复。
②故障发生后采取的措施,将数据库内容 恢复到某个保证数据一致性,事务原子 性及持久性的状态7..2 存贮器结构存贮器结构 1.存贮器类型 易失存储器:主存、高速缓存 非易失存储器:磁盘、磁带 稳定性存储器:通过一些技术手段实现 2.稳定存贮器的实现 RAID 3.数据访问 给一些概念和记号 数据库常驻在磁盘上,以块为单位存贮一块可以包含多个数据项假设没有数据块是跨块的 输入/出操作以块为单位,磁盘上的块为物理块,临时位于主存的块为缓冲块内存中用以存放块的区域称为缓冲区 磁盘和主存间的块移动由下面两个操作完成 (1)input(B) 传送物理块B至主存2)output(B) 传送缓冲块B至磁盘,并 替换磁盘上相应的物理块 Ti的私有工作区,在事务初始化时创建,事务提交或中止时删除Ti的工作区中保存的每一个数据项X记为Xi,Ti通过在其工作区和系统缓冲区之间传送数据与数据库交互,所用的两个操作: (1)Read(x)将数据项X的值赋予局部变量xi a.若X所在的块Bx,不在内存,则发指 令input(Bx)。
b.将缓冲块Bx中X的值赋予xi(2)Write(x)将局部变量xi的值赋予缓冲块 中的数据项X a.若X所在的块Bx不在内存,则发指令input(Bx) b.将xi的值赋予缓冲块Bx中的X7..3 恢复与原子性恢复与原子性 发生故障和简单的故障恢复过程,可能导致数据库的不一致为了保持原子性的目标,需记录对数据修改的描述信息例:考虑事务Ti,将¥50从帐户A转到帐户B,A和B的初值分别为1000和2000,假设Ti执行过程中系统发生崩溃,且发生在output(BA)之后, output(BB) 之前,由于内存的内容丢失,无法知道事务的结局可以调用恢复过程 •重新执行Ti,A的值变为900而不是950,系统产生不一致•不重新执行Ti,A的值变为950而B的值为2000 ,系统仍然不一致7..4 基于日志的恢复基于日志的恢复 日志:记录数据库中的所有更新活动包括以下段 :*事务标识是执行Write操作的事务的唯一标识 *数据项标识是所写数据项的唯一标识,通常是数据项在磁盘上的位置旧值是数据项的写前值。
新值是数据项的写后值 日志记录:
仍然用银行的例子说明:T0:read(A) T1: read(C) A:=A-50 C:=C-100 write(A) write(C) read(B) B:=B+50 write(B) 设执行顺序
• redo(Ti):将事务Ti更新的所有数据项的值置为新值 故障发生后,恢复子系统检查日志,以确定哪个事务需要redo,哪个需要undo •事务Ti需要redo,当且仅当日志中有
为降低恢复过程的开销,引入检查点 在日志文件中周期的加入检查点 7..5 影子分页影子分页 1.影子分页方法影子分页方法 影子分页技术是影子拷贝技术的改进某些情况下,影子分页技术比基于日志的方法需要更少的磁盘访问,但是影子分页技术有它的缺点 影子分页技术的主要思想是在一个事务的生存周期维护两张页表:当前页表和影子页表事务开始时两张页表相同,影子页表在事务执行过程中不发生改变当前页表在事务执行write操作时可能改变所有input和output操作使用当前页表定位磁盘上的数据库页 2 2..恢复方法恢复方法 将影子页表存入非易失存储器,保存了事务执行前的数据库状态 当系统崩溃或事务中止,可以恢复数据库到事务执行前状态事务提交后,当前页写到非易失存储器,可以成为新的影子页,下一个事务开始执行成功的恢复要求在系统崩溃后能在磁盘上找到影子页表简单的方法是在稳定存储器上设置固定的区域记录影子页表的磁盘地址当系统崩溃后重新启动时,拷贝影子页表至主存,并且用它进行后续事务处理中止事务的恢复是自动的,不需要调用undo操作 提交一个事务时,必须:提交一个事务时,必须: 1)保证主存中所有被该事务修改过的缓冲页都被 写到磁盘上; 2)将当前页表写到磁盘上,注意不能覆盖影子页 表; 3)将当前页表的磁盘地址写到记录影子页表的地 址的稳定存储器的固定区域,覆盖旧的影子页 表的地址。
于是当前页表就成了影子页表 如果故障发生在第3)步之结束前,系统重启后,系统状态恢复到该事务执行前的时刻,故障发生在第3)步结束后,该事务的执行结果被保存 与基于日志的恢复相比,消除了日志记录输出的开销,恢复速度明显加快缺点有:•提交开销使用影子分页技术,事务提交时要输出多个块(实际数据块、当前页表和当前页表的磁盘地址)基于日志的机制只要写日志记录•数据分片在第二章中,为了加快数据传输速度,将相关的数据库页存储在临近的磁盘块影子分页技术在数据更新时使得数据库页改变了存储位置•垃圾回收当一个事务提交时,包含该事务所修改数据旧值的数据库页不能再被访问,变成垃圾页它们的信息已经是无用的信息,但是又不是空闲空间需要周期性的找出所有垃圾页将它们加入空闲页列表7..6 并发事务的恢复并发事务的恢复 到目前为止,我们只考虑了只有一个事务在执行情况的恢复,下面讨论如何修改和扩展基于日志的恢复机制以处理多个事物并发的情况不论有几个并发事务,系统只有一个磁盘缓冲区和一个日志,缓冲块由所有事务共享 1.与并发控制的关系 恢复机制很大程度上依赖于所用的并发控制机制。
为回滚一个失败事务,必须撤消该事务所做的更新假设事务T0必须被回滚,并且被T0更新的数据项Q必须恢复成旧值当使用基于日志的机制进行恢复时,利用日志记录中的撤消信息进行恢复现在假设T1在T0回滚前对Q也做了一次更新如果T0被回滚,T1所做的更新就会丢失 因此,事务T更新了数据项Q,在T提交或回滚前不允许其他事务修改Q使用严格两阶段封锁协议就可以保证这一点 2.事务回滚 利用日志记录回滚失败的事务Ti日志的扫描由后至前进行对日志中形如
undo-list由需要撤消的事务构成, redo-list由需要重做的事务构成这两张表在恢复时构造,由后至前扫描日志,直到发现第一个
7..7 缓冲区管理缓冲区管理 本节考虑几个细节,它们对实现故障恢复机制非常重要,并且能保证数据一致性但是只增加少量与数据库交互的开销•日志记录缓冲日志记录缓冲 前面的讨论,我们假定每个日志记录在创建时都被输出到了稳定存储器该假定大大增加了系统的开销,原因是通常向稳定存储器输出是以块为单位的一个日志记录比一个块小的多 解决办法是一次输出多个日志记录将多个日志记录先集中在日志缓冲区,在输出到稳定存储器 这样,在日志记录输出到稳定存储器前,系统发生故障时,日志记录完全丢失因此必须对恢复技术增加一些要求,以保证事务的原子性 1)在日志记录
在调入新块时B2,按照缓冲区管理的策略,将一块B1输出如果B1已经修改过,那么B1必须在输入B2前就输出输出日志记录的规则限制了数据块的自由输出如果B2的输入使得必须输出B1,那么与B1中数据有关的日志记录必须在B1之前输出到稳定存储器上因此: *输出日志记录至稳定存储器; *将块B1输出到磁盘上; *将块B2输入到主存中•操作系统在缓冲区管理中的作用操作系统在缓冲区管理中的作用 可以用下面两种方法之一管理数据库缓冲区:1)数据库系统保留部分主存作为缓冲区2)数据库系统在操作系统提供的虚拟内存中实现缓冲区 7..8 非易失性存储器数据恢复非易失性存储器数据恢复 到目前为至,只考虑了一种情况,既故障导致了易失性存储器上的信息的丢失,非易失性存储器保持完好这一节讨论磁盘故障时的恢复 基本方法是周期性的将整个数据库的内容转储到稳定存储器上,比如磁带上发生故障时,就可以用最后一次转储的数据库恢复到故障前的一致状态 7..9 高级恢复技术高级恢复技术 •逻辑逻辑Undo日志日志•事务回滚事务回滚•检查点检查点•重启动恢复重启动恢复。
