1、2022-12-131数据库原理数据库恢复技术数据库恢复技术 第第7章章n 事务的基本概念事务的基本概念n 数据库恢复概述数据库恢复概述n 故障的种类故障的种类n 恢复的技术实现恢复的技术实现n 恢复策略恢复策略n 具有检查点的恢复技术具有检查点的恢复技术n 数据库镜像数据库镜像n OracleOracle的恢复技术的恢复技术2022-12-132数据库原理第三篇第三篇 系统篇系统篇n数据库系统中的数据是由数据库系统中的数据是由DBMSDBMS统一管理和控制的,统一管理和控制的,为了适应数据共享的环境,为了适应数据共享的环境,DBMSDBMS必须提供必须提供数据保数据保护护能力,以保证数据库中
2、数据的能力,以保证数据库中数据的安全可靠安全可靠和和正确正确有效有效。n数据保护数据保护p 安全性安全性p 完整性完整性p 并发控制并发控制p 数据库恢复数据库恢复第七章第七章 数据库恢复技术数据库恢复技术第八章第八章 并发控制并发控制第九章第九章 数据库安全性数据库安全性第十章第十章 数据库完整性数据库完整性2022-12-133数据库原理7.1 7.1 事务的基本概念事务的基本概念n 什么是事务什么是事务n 如何定义事务如何定义事务n 事务的特性事务的特性2022-12-134数据库原理什么是事务什么是事务2022-12-135数据库原理n显式定义方式显式定义方式 BEGIN TRANSA
3、CTION BEGIN TRANSACTIONBEGIN TRANSACTION BEGIN TRANSACTION SQL SQL 语句语句1 1 SQL SQL 语句语句1 1 SQL SQL 语句语句2 2 SQL SQL 语句语句2 2 。COMMIT ROLLBACKCOMMIT ROLLBACKn隐式方式隐式方式当用户没有显式地定义事务时,当用户没有显式地定义事务时,DBMSDBMS按缺省规定自动划分事务。按缺省规定自动划分事务。如何定义事务如何定义事务2022-12-136数据库原理COMMITCOMMITp 事务正常结束事务正常结束 p 提交事务的所有操作提交事务的所有操作p
4、事务中所有对数据库的更新写回到磁盘物理数据库事务中所有对数据库的更新写回到磁盘物理数据库ROLLBACKROLLBACKp 事务异常终止事务异常终止p 事务运行的过程中发生了故障,不能继续执行事务运行的过程中发生了故障,不能继续执行p 将事务中对数据库的所有已完成的操作全部撤销将事务中对数据库的所有已完成的操作全部撤销p 事务滚回到开始时的状态事务滚回到开始时的状态2022-12-137数据库原理事务的特性事务的特性n原子性原子性(AtomicityAtomicity)n一致性一致性(ConsistencyConsistency)n隔离性隔离性(IsolationIsolation)n持续性持
5、续性(Durability Durability)事务是数据库的逻辑工作单位,事务是数据库的逻辑工作单位,事务中包括的事务中包括的诸操作要么都做,要么都不做。诸操作要么都做,要么都不做。2022-12-138数据库原理一致性一致性n事务执行的结果必须是使数据库从一个一致性状态事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态变到另一个一致性状态一致性状态:一致性状态:数据库中只包含成功事务提交的结果数据库中只包含成功事务提交的结果不一致状态:不一致状态:数据库中包含失败事务的结果数据库中包含失败事务的结果2022-12-139数据库原理银行转帐:从帐号银行转帐:从帐号A A中取出
6、一万元,存入帐号中取出一万元,存入帐号B B。n定义一个事务,该事务包括两个操作定义一个事务,该事务包括两个操作n这两个操作要么全做,要么全不做。这两个操作要么全做,要么全不做。p 全做或者全不做,数据库都处于一致性状态。全做或者全不做,数据库都处于一致性状态。p 如果只做一个操作,数据库就处于不一致性状如果只做一个操作,数据库就处于不一致性状态。态。2022-12-1310数据库原理隔离性隔离性n一个事务的执行不能被其他事务干扰一个事务的执行不能被其他事务干扰n一个事务内部的操作及使用的数据对其他并发一个事务内部的操作及使用的数据对其他并发事务是隔离的事务是隔离的n并发执行的各个事务之间不能
7、互相干扰并发执行的各个事务之间不能互相干扰2022-12-1311数据库原理T T1 1的修改被的修改被T T2 2覆盖了!覆盖了!2022-12-1312数据库原理持久性持久性n持续性也称永久性(持续性也称永久性(PermanencePermanence)p 一个事务一旦提交,它对数据库中数据的一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。改变就应该是永久性的。p 接下来的其他操作或故障不应该对其执行接下来的其他操作或故障不应该对其执行结果有任何影响。结果有任何影响。2022-12-1313数据库原理n保证事务保证事务ACIDACID特性是事务处理的任务特性是事务处理的任务n破坏
8、事务破坏事务ACIDACID特性的因素特性的因素p 多个事务并行运行时,不同事务的操作多个事务并行运行时,不同事务的操作交叉交叉执行执行p 事务在运行过程中被事务在运行过程中被强行停止强行停止2022-12-1314数据库原理7.2 7.2 数据库恢复概述数据库恢复概述n故障是不可避免的故障是不可避免的p 计算机硬件故障计算机硬件故障p 系统软件和应用软件的错误系统软件和应用软件的错误p 操作员的失误操作员的失误p 恶意的破坏恶意的破坏n故障的影响故障的影响p 运行事务非正常中断运行事务非正常中断p 破坏数据库破坏数据库2022-12-1315数据库原理n数据库管理系统对故障的对策数据库管理系
9、统对故障的对策p DBMSDBMS提供恢复子系统提供恢复子系统p 保证故障发生后,能把数据库中的数据从错误保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态。状态恢复到某种逻辑一致的状态。p 保证事务保证事务ACIDACIDn恢复技术是衡量系统优劣的重要指标恢复技术是衡量系统优劣的重要指标2022-12-1316数据库原理7.3 7.3 故障的种类故障的种类 数据库运行过程中可能发生的故障主要有:数据库运行过程中可能发生的故障主要有:p 事务内部故障事务内部故障p 系统故障系统故障p 介质故障介质故障p 计算机病毒计算机病毒各类故障,对数据库的影响有两种可能性:各类故障,对数
10、据库的影响有两种可能性:u 数据库本身被破坏数据库本身被破坏;u 数据库没有破坏,但数据库没有破坏,但数据可能不正确数据可能不正确。2022-12-1317数据库原理事务内部的故障事务内部的故障n什么是事务故障什么是事务故障p 某个事务在运行过程中由于种种原因未运行至正某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了常终止点就夭折了n事务故障的常见原因事务故障的常见原因p 输入数据有误输入数据有误p 运算溢出运算溢出p 违反了某些完整性限制违反了某些完整性限制p 某些应用程序出错某些应用程序出错p 并行事务发生死锁并行事务发生死锁p。2022-12-1318数据库原理n发生事务故障时
11、,夭折的事务可能已把对数据库的发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。部分修改写回磁盘。n事务故障的恢复:撤消事务(事务故障的恢复:撤消事务(UNDOUNDO)n强行回滚(强行回滚(ROLLBACKROLLBACK)该事务)该事务n清除该事务对数据库的所有修改,使得这个事务象清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。根本没有启动过一样。事务故障的恢复事务故障的恢复2022-12-1319数据库原理系统故障系统故障n什么是系统故障什么是系统故障p 整个系统的正常运行突然被破坏整个系统的正常运行突然被破坏p 所有正在运行的事务都非正常终止所有正在运行的事
12、务都非正常终止p 内存中数据库缓冲区的信息全部丢失内存中数据库缓冲区的信息全部丢失p 外部存储设备上的数据未受影响外部存储设备上的数据未受影响2022-12-1320数据库原理系统故障的常见原因系统故障的常见原因n操作系统或操作系统或DBMSDBMS代码错误代码错误n操作员操作失误操作员操作失误n特定类型的硬件错误(如特定类型的硬件错误(如CPUCPU故障)故障)n突然停电突然停电2022-12-1321数据库原理n 清除尚未完成的事务对数据库的所有修改清除尚未完成的事务对数据库的所有修改p系统重新启动时,恢复程序要强行撤消(系统重新启动时,恢复程序要强行撤消(UNDOUNDO)所有未完成事务
13、。所有未完成事务。n将缓冲区中已完成事务提交的结果写入数据库将缓冲区中已完成事务提交的结果写入数据库p系统重新启动时,恢复程序需要重做(系统重新启动时,恢复程序需要重做(REDOREDO)所)所有已提交的事务。有已提交的事务。系统故障的恢复系统故障的恢复2022-12-1322数据库原理介质故障介质故障n硬件故障使存储在外存中的数据部分丢失或全部硬件故障使存储在外存中的数据部分丢失或全部丢失丢失n介质故障比前两类故障的可能性小得多,但破坏介质故障比前两类故障的可能性小得多,但破坏性大得多。性大得多。2022-12-1323数据库原理n硬件故障硬件故障p 磁盘损坏磁盘损坏p 磁头碰撞磁头碰撞p
14、操作系统的某种潜在错误操作系统的某种潜在错误p 瞬时强磁场干扰瞬时强磁场干扰介质故障的常见原因介质故障的常见原因2022-12-1324数据库原理介质故障的恢复介质故障的恢复n装入数据库发生介质故障前某个时刻的数据副本装入数据库发生介质故障前某个时刻的数据副本n重做自此时始的所有成功事务,将这些事务已提交重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库。的结果重新记入数据库。2022-12-1325数据库原理恢复操作的基本原理恢复操作的基本原理n恢复操作的基本原理:冗余恢复操作的基本原理:冗余p利用存储在系统其它地方的冗余数据来重建利用存储在系统其它地方的冗余数据来重建数据库中
15、已被破坏或不正确的那部分数据数据库中已被破坏或不正确的那部分数据n恢复的实现技术:复杂恢复的实现技术:复杂p一个大型数据库产品,恢复子系统的代码要一个大型数据库产品,恢复子系统的代码要占全部代码的占全部代码的10%10%以上。以上。2022-12-1326数据库原理7.4 7.4 恢复的实现技术恢复的实现技术恢复机制涉及的关键问题恢复机制涉及的关键问题1.1.如何建立冗余数据如何建立冗余数据p 数据转储数据转储(backupbackup)p 登录日志文件登录日志文件(logginglogging)2.2.如何利用这些冗余数据实施数据库恢复如何利用这些冗余数据实施数据库恢复2022-12-132
16、7数据库原理7.47.4.1.1 数据转储数据转储n转储是指转储是指DBADBA将整个数据库复制到磁带或另一个磁盘将整个数据库复制到磁带或另一个磁盘上保存起来的过程。上保存起来的过程。n这些备用的数据文本称为后备副本或后援副本。这些备用的数据文本称为后备副本或后援副本。故障发生点故障发生点 转储转储 运行事务运行事务 正常运行正常运行 Ta Ta Tb Tb Tf Tf 重装后备副本重装后备副本 重新运行事务重新运行事务恢复恢复 2022-12-1328数据库原理转储的方法转储的方法p 静态转储与动态转储静态转储与动态转储p 海量转储与增量转储海量转储与增量转储p 转储方法小结转储方法小结20
17、22-12-1329数据库原理n在系统中无运行事务时进行转储在系统中无运行事务时进行转储n转储开始时数据库处于一致性状态转储开始时数据库处于一致性状态n转储期间不允许对数据库的任何存取、修改活动转储期间不允许对数据库的任何存取、修改活动n优点:实现简单优点:实现简单n缺点:降低了数据库的可用性缺点:降低了数据库的可用性p 转储必须等用户事务结束转储必须等用户事务结束p 新的事务必须等转储结束新的事务必须等转储结束静态转储静态转储2022-12-1330数据库原理 故障发生点故障发生点 静态静态转储转储 运行事务运行事务 正常运行正常运行 Ta Ta Tb Tb Tf Tf 重装后备副本重装后备
18、副本 恢复恢复 2022-12-1331数据库原理n转储操作与用户事务并发进行转储操作与用户事务并发进行n转储期间允许对数据库进行存取或修改转储期间允许对数据库进行存取或修改n优点优点p 不用等待正在运行的用户事务结束不用等待正在运行的用户事务结束p 不会影响新事务的运行不会影响新事务的运行n缺点:不能保证副本中的数据正确有效缺点:不能保证副本中的数据正确有效动态转储动态转储n利用动态转储得到的副本进行故障恢复利用动态转储得到的副本进行故障恢复p 需要把动态转储期间各事务对数据库的修改活动需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件。登记下来,建立日志文件。p 后备副本加上
19、日志文件才能把数据库恢复到某一后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态时刻的正确状态2022-12-1332数据库原理 运行事务运行事务 故障发生点故障发生点 动态动态转储转储 运行事务运行事务 正常运行正常运行 Ta Ta Tb Tb Tf Tf重装后备副本重装后备副本 利用日志文件恢复利用日志文件恢复恢复恢复 2022-12-1333数据库原理 Ta Ta Tb Tb Tf Tf 动态动态转储转储 运行事务运行事务 故障发生点故障发生点正常运行正常运行 登记日志文件登记日志文件 登记新日志文件登记新日志文件 转储日志文件转储日志文件 重装后备副本,然后利用转储的日志文件恢复
20、重装后备副本,然后利用转储的日志文件恢复恢复到一恢复到一 致性状态致性状态2022-12-1334数据库原理海量转储、增量转储海量转储、增量转储n海量转储海量转储:每次转储全部数据库每次转储全部数据库n增量转储增量转储:只转储上次转储后更新过的数据只转储上次转储后更新过的数据n海量转储与增量转储比较海量转储与增量转储比较p从恢复角度看,使用海量转储得到的后备副本进从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便。行恢复往往更方便。p但如果数据库很大,事务处理又十分频繁,则增但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。量转储方式更实用更有效。2022-12-133
21、5数据库原理转储方法小结转储方法小结 转储状态转储状态动态转储动态转储静态转储静态转储转储转储方式方式海量转储海量转储动态海量转储动态海量转储静态海量转储静态海量转储增量转储增量转储动态增量转储动态增量转储静态增量转储静态增量转储表表7.1 7.1 数据转储的分类数据转储的分类2022-12-1336数据库原理n应定期进行数据转储,制作后备副本。应定期进行数据转储,制作后备副本。n但转储又是十分耗费时间和资源的,不能频繁进行。但转储又是十分耗费时间和资源的,不能频繁进行。nDBADBA应该根据数据库使用情况确定适当的转储周期和应该根据数据库使用情况确定适当的转储周期和转储方法。例:转储方法。例
22、:p 每天晚上进行动态增量转储每天晚上进行动态增量转储p 每周进行一次动态海量转储每周进行一次动态海量转储p 每月进行一次静态海量转储每月进行一次静态海量转储转储策略转储策略2022-12-1337数据库原理7.47.4.2.2 登记日志文件登记日志文件n日志文件的内容日志文件的内容n日志文件的用途日志文件的用途n登记日志文件的原则登记日志文件的原则2022-12-1338数据库原理日志文件的内容日志文件的内容1.1.什么是日志文件什么是日志文件 日志文件日志文件(log)(log)是用来记录事务对数据库的更新操作的是用来记录事务对数据库的更新操作的文件文件2.2.日志文件的格式日志文件的格式
23、p 以以记录记录为单位的日志文件为单位的日志文件p 以以数据块数据块为单位的日志文件为单位的日志文件3.3.日志文件内容日志文件内容p 各个事务的开始标记各个事务的开始标记(BEGIN TRANSACTION)(BEGIN TRANSACTION)p 各个事务的结束标记各个事务的结束标记(COMMIT(COMMIT或或ROLLBACK)ROLLBACK)p 各个事务的所有更新操作各个事务的所有更新操作 日志文件中的一个日志记录日志文件中的一个日志记录 (log record)(log record)2022-12-1339数据库原理每条日志记录的内容每条日志记录的内容p事务标识事务标识p操作类
24、型(插入、删除或修改)操作类型(插入、删除或修改)p操作对象(记录的内部标识)操作对象(记录的内部标识)p更新前数据的旧值(对插入操作而言,此项为空值)更新前数据的旧值(对插入操作而言,此项为空值)p更新后数据的新值(对删除操作而言更新后数据的新值(对删除操作而言,此项为空值)此项为空值)4.4.基于记录的日志文件基于记录的日志文件2022-12-1340数据库原理每条日志记录的内容每条日志记录的内容p事务标识(标明是那个事务)事务标识(标明是那个事务)p更新前数据所在的整个数据块的值(对插入操作更新前数据所在的整个数据块的值(对插入操作而言,此项为空值)而言,此项为空值)p更新后整个数据块的
25、值(对删除操作而言更新后整个数据块的值(对删除操作而言,此项此项为空值)为空值)5.5.基于数据块的日志文件基于数据块的日志文件2022-12-1341数据库原理日志文件的用途日志文件的用途p事务故障事务故障恢复和恢复和系统故障系统故障恢复恢复必须用日志文件必须用日志文件。p动态转储动态转储方式中,方式中,必须建立日志文件必须建立日志文件,后援副本和,后援副本和日志文件综合起来有效地恢复数据库。日志文件综合起来有效地恢复数据库。p静态转储静态转储方式中,也方式中,也可以建立日志文件可以建立日志文件。当数据库。当数据库破坏后可重新装入后援副本把数据库恢复到转储结破坏后可重新装入后援副本把数据库恢
26、复到转储结束时刻的正确状态,然后利用日志文件,把已完成束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。务进行撤销处理。2022-12-1342数据库原理 故障发生点故障发生点 静态转储静态转储 运行事务运行事务 正常运行正常运行 Ta Tb Tf Ta Tb Tf 登记日志文件登记日志文件 重装后备副本重装后备副本 利用日志文件恢复事务利用日志文件恢复事务 继续运行继续运行介质故障恢复介质故障恢复 登记日志文件登记日志文件 2022-12-1343数据库原理登记日志文件的原则登记日志文件的原则n
27、为保证数据库是可恢复的,登记日志文件时必须遵循为保证数据库是可恢复的,登记日志文件时必须遵循两条原则两条原则:p登记的次序严格按并行事务执行的时间次序登记的次序严格按并行事务执行的时间次序p必须先写日志文件,后写数据库必须先写日志文件,后写数据库 写日志文件操作:把表示这个修改的日志记录写日志文件操作:把表示这个修改的日志记录 写到日志文件。写到日志文件。写数据库操作:把对数据的修改写到数据库中。写数据库操作:把对数据的修改写到数据库中。2022-12-1344数据库原理n为什么要先写日志文件为什么要先写日志文件p写数据库和写日志文件是两个不同的操作。写数据库和写日志文件是两个不同的操作。p在
28、这两个操作之间可能发生故障。在这两个操作之间可能发生故障。p如果先写了数据库修改,而在日志文件中没有登如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了。记下这个修改,则以后就无法恢复这个修改了。p如果先写日志,但没有修改数据库,按日志文件如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的恢复时只不过是多执行一次不必要的UNDOUNDO操作,操作,并不会影响数据库的正确性。并不会影响数据库的正确性。2022-12-1345数据库原理7.5 7.5 恢复策略恢复策略n 事务故障恢复事务故障恢复n 系统故障恢复系统故障恢复n 介质故障恢复介质
29、故障恢复2022-12-1346数据库原理7.5.1 7.5.1 事务故障恢复事务故障恢复n事务故障:事务在运行至正常终止点前被中止事务故障:事务在运行至正常终止点前被中止n恢复方法恢复方法p由恢复子系统应利用日志文件撤消(由恢复子系统应利用日志文件撤消(UNDOUNDO)此事)此事务已对数据库进行的修改务已对数据库进行的修改n事务故障的恢复由系统事务故障的恢复由系统自动完成自动完成,不需要用户干预,不需要用户干预2022-12-1347数据库原理事务故障恢复步骤事务故障恢复步骤1.1.反向扫描文件日志(即从最后向前扫描日志文件),查找该反向扫描文件日志(即从最后向前扫描日志文件),查找该事务
30、的更新操作。事务的更新操作。2.2.对该事务的更新操作执行逆操作。即将日志记录中对该事务的更新操作执行逆操作。即将日志记录中“更新前更新前的值的值”写入数据库。写入数据库。n插入操作,插入操作,“更新前的值更新前的值”为空,则相当于做删除操作;为空,则相当于做删除操作;n删除操作,删除操作,“更新后的值更新后的值”为空,则相当于做插入操作;为空,则相当于做插入操作;n若是修改操作,则用修改前值代替修改后值。若是修改操作,则用修改前值代替修改后值。3.3.继续反向扫描日志文件,查找该事务的其他更新操作,并做继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。同样处理。4.4.如此处理下
31、去,直至读到此事务的开始标记,事务故障恢复如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。就完成了。2022-12-1348数据库原理7.5.2 7.5.2 系统故障恢复系统故障恢复n系统故障造成数据库不一致状态的原因系统故障造成数据库不一致状态的原因p一些未完成事务对数据库的更新已写入数据库一些未完成事务对数据库的更新已写入数据库p一些已提交事务对数据库的更新还留在缓冲区没一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库来得及写入数据库n恢复方法恢复方法p Undo Undo 故障发生时未完成的事务故障发生时未完成的事务p Redo Redo 已完成的事务已完成的事务
32、n系统故障的恢复由系统在系统故障的恢复由系统在重新启动时重新启动时自动完成,不需自动完成,不需要用户干预要用户干预2022-12-1349数据库原理系统故障恢复步骤系统故障恢复步骤1.1.正向扫描日志文件(即从头扫描日志文件)正向扫描日志文件(即从头扫描日志文件)nRedoRedo队列队列:在故障发生前已经提交的事务在故障发生前已经提交的事务 T1,T3,T8T1,T3,T8.nUndoUndo队列队列:故障发生时尚未完成的事务故障发生时尚未完成的事务 T2,T4,T5,T6,T7,T9 T2,T4,T5,T6,T7,T9 .2.2.对对UndoUndo队列队列事务进行事务进行UNDOUNDO
33、处理处理 反向扫描日志文件,对每个反向扫描日志文件,对每个UNDOUNDO事务的更新操作执行逆操作事务的更新操作执行逆操作 T2,T4,T5,T6,T7,T9 T2,T4,T5,T6,T7,T9 3.3.对对RedoRedo队列事务进行队列事务进行REDOREDO处理处理 正向扫描日志文件,对每个正向扫描日志文件,对每个REDOREDO事务重新执行登记的操作事务重新执行登记的操作 T1,T3,T8T1,T3,T8.2022-12-1350数据库原理7.5.3 7.5.3 介质故障恢复介质故障恢复n恢复方法恢复方法p重装数据库,使数据库恢复到一致性状态重装数据库,使数据库恢复到一致性状态p重做已
34、完成的事务重做已完成的事务n介质故障的恢复需要介质故障的恢复需要DBADBA介入介入nDBADBA的工作的工作p重装最近转储的数据库副本和有关的各日志文件重装最近转储的数据库副本和有关的各日志文件副本副本p执行系统提供的恢复命令执行系统提供的恢复命令n具体的恢复操作仍由具体的恢复操作仍由DBMSDBMS完成完成2022-12-1351数据库原理2.2.装入有关的日志文件副本,重做已完成的事务。装入有关的日志文件副本,重做已完成的事务。p首先扫描日志文件,找出故障发生时已提交的事务的标识,首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。将其记入重做队列。p然后正向扫描日志文
35、件,对重做队列中的所有事务进行重做然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中处理。即将日志记录中“更新后的值更新后的值”写入数据库。写入数据库。介质故障恢复步骤介质故障恢复步骤1.1.装入最新的后备数据库副本,使数据库恢复到最近一次转储时装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。的一致性状态。p静态转储的数据库副本,装入后数据库即处于一致性状态;静态转储的数据库副本,装入后数据库即处于一致性状态;p动态转储的数据库副本,还须同时装入转储时刻的日志文件动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即
36、副本,利用与恢复系统故障相同的方法(即REDO+UNDOREDO+UNDO),),才能将数据库恢复到一致性状态。才能将数据库恢复到一致性状态。2022-12-1352数据库原理7.6 7.6 具有检查点的恢复技术具有检查点的恢复技术n 问题的提出问题的提出n 检查点技术检查点技术n 利用检查点的恢复策略利用检查点的恢复策略2022-12-1353数据库原理问题的提出问题的提出n两个问题两个问题p 搜索整个日志将耗费大量的时间搜索整个日志将耗费大量的时间p REDOREDO处理:重新执行,浪费了大量时间处理:重新执行,浪费了大量时间n解决方案解决方案具有检查点的恢复技术具有检查点的恢复技术n在日
37、志文件中增加检查点(在日志文件中增加检查点(checkpointcheckpoint)记录)记录n增加重新开始文件增加重新开始文件n恢复子系统在登录日志文件期间动态地维护日志恢复子系统在登录日志文件期间动态地维护日志2022-12-1354数据库原理检查点技术检查点技术n检查点记录的内容检查点记录的内容p 建立检查点时刻所有正在执行的事务清单建立检查点时刻所有正在执行的事务清单p 这些事务最近一个日志记录的地址这些事务最近一个日志记录的地址n重新开始文件的内容重新开始文件的内容p 记录各个检查点记录在日志文件中的地址记录各个检查点记录在日志文件中的地址2022-12-1355数据库原理图图7.
38、3 7.3 具有检查点的日志文件和重新开始文件具有检查点的日志文件和重新开始文件2022-12-1356数据库原理p将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上。将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上。p在日志文件中写入一个检查点记录。在日志文件中写入一个检查点记录。p将当前数据缓冲区的所有数据记录写入磁盘的数据库中。将当前数据缓冲区的所有数据记录写入磁盘的数据库中。p把检查点记录在日志文件中的地址写入一个重新开始文件。把检查点记录在日志文件中的地址写入一个重新开始文件。在检查点维护日志文件步骤在检查点维护日志文件步骤建立检查点建立检查点n定期定期p按照预定的一个时间间隔
39、按照预定的一个时间间隔n不定期不定期p按照某种规则,如日志文件已写满一半建立一个检查点按照某种规则,如日志文件已写满一半建立一个检查点2022-12-1357数据库原理利用检查点的恢复策略利用检查点的恢复策略n当事务当事务T T在一个检查点之前提交在一个检查点之前提交 T T对数据库所做的修改已写入数据库对数据库所做的修改已写入数据库n在进行恢复处理时,没有必要对事务在进行恢复处理时,没有必要对事务T T执行执行REDOREDO操作操作图图7.4 7.4 恢复子系统采取的不同策略恢复子系统采取的不同策略2022-12-1358数据库原理恢复步骤恢复步骤1.1.从重新开始文件中找到最后一个检查点
40、记录在日志文件中的地址,从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录;由该地址在日志文件中找到最后一个检查点记录;2.2.由该检查点记录得到检查点建立时刻所有正在执行的事务清单由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LISTACTIVE-LISTp建立两个事务队列:建立两个事务队列:UNDO-LIST UNDO-LIST 和和 REDO-LIST REDO-LIST p把把ACTIVE-LISTACTIVE-LIST暂时放入暂时放入UNDO-LISTUNDO-LIST队列,队列,REDOREDO队列暂为空。队列
41、暂为空。3.3.从检查点开始正向扫描日志文件,直到日志文件结束从检查点开始正向扫描日志文件,直到日志文件结束p如有新开始的事务如有新开始的事务T Ti i,把,把T Ti i暂时放入暂时放入UNDO-LISTUNDO-LIST队列队列p如有提交的事务如有提交的事务T Tj j,把,把T Tj j从从UNDO-LISTUNDO-LIST队列移到队列移到REDO-LISTREDO-LIST队列队列4.4.对对UNDO-LISTUNDO-LIST中的每个事务执行中的每个事务执行UNDOUNDO操作操作,对对REDO-LISTREDO-LIST中的每个中的每个事务事务执行执行REDOREDO操作操作2
42、022-12-1359数据库原理7.7 7.7 数据库镜像数据库镜像n介质故障是对系统影响最为严重的一种故障,严重影响数据库介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性的可用性p介质故障恢复比较费时介质故障恢复比较费时p为预防介质故障,为预防介质故障,DBADBA必须周期性地转储数据库必须周期性地转储数据库n提高数据库可用性的解决方案提高数据库可用性的解决方案p数据库镜像(数据库镜像(MirrorMirror)n数据库镜像数据库镜像nDBMSDBMS自动把整个数据库或其中的关键数据复制到另一磁盘上自动把整个数据库或其中的关键数据复制到另一磁盘上nDBMSDBMS自动保证镜像数
43、据与主数据的一致性自动保证镜像数据与主数据的一致性(图图7.5a)7.5a)2022-12-1360数据库原理n出现介质故障时出现介质故障时pDBMSDBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本闭系统和重装数据库副本(图图7.5b)7.5b)n没有出现故障时没有出现故障时p可用于并发操作可用于并发操作(图图7.5a)7.5a)p一个用户对数据加排他锁修改数据一个用户对数据加排他锁修改数据p其他用户可以读镜像数据库上的数据其他用户可以读镜像数据库上的数据2022-12-1361数据库原理图图7.5 7.5 数据库镜像数
44、据库镜像2022-12-1362数据库原理7.8 Oracle7.8 Oracle的恢复技术的恢复技术n 转储转储n 登记日志文件登记日志文件2022-12-1363数据库原理转转 储储n转储后备副本的方法转储后备副本的方法p文件拷贝文件拷贝pEXPORTEXPORT实用程序实用程序p用用SQLSQL命令命令SPOOLSPOOLp自己编程实现自己编程实现p文件拷贝文件拷贝pIMPORTIMPORT实用程序实用程序pSQLSQL*LOADERLOADER实用程序实用程序p自己编程实现自己编程实现n 重装后备副本的方法重装后备副本的方法2022-12-1364数据库原理登记日志文件登记日志文件nO
45、RACLE V.5ORACLE V.5:以数据块为单位:以数据块为单位nORACLE 7ORACLE 7:REDOREDO日志日志 +回滚段回滚段2022-12-1365数据库原理n日志文件以数据块为单位,恢复操作不是基于操作,而是基日志文件以数据块为单位,恢复操作不是基于操作,而是基于数据块。于数据块。n将更新前的旧值与更新后的新值分别放在两个不同的日志文将更新前的旧值与更新后的新值分别放在两个不同的日志文件中:件中:p记录数据库更新前旧值的日志文件称为数据库前像文件记录数据库更新前旧值的日志文件称为数据库前像文件(Before ImageBefore Image,简称,简称BIBI文件)文
46、件)p记录数据库更新后新值的日志文件称为数据库的后像文件记录数据库更新后新值的日志文件称为数据库的后像文件(After ImageAfter Image,简称,简称AIAI文件)文件)Oracle V.5Oracle V.5的恢复技术的恢复技术nBIBI文件是必须的,文件是必须的,AIAI文件是任选的文件是任选的n没有没有AIAI文件:只能执行文件:只能执行UNDOUNDO处理,不能执行处理,不能执行REDOREDO处理处理2022-12-1366数据库原理Oracle 7Oracle 7的恢复技术的恢复技术nREDOREDO日志文件:更新数据的前像和后像日志文件:更新数据的前像和后像n回滚段
47、回滚段(Rollback Segment(Rollback Segment):记录尚未完成的更新事务的更新):记录尚未完成的更新事务的更新数据的前像数据的前像n事务故障恢复事务故障恢复p根据回滚段中的数据,撤消该事务的操作根据回滚段中的数据,撤消该事务的操作n系统故障恢复系统故障恢复p首先扫描首先扫描REDOREDO日志文件,重做所有操作,并对更新操作建立日志文件,重做所有操作,并对更新操作建立回滚段数据。当遇到提交记录,取消相应回滚段中数据。回滚段数据。当遇到提交记录,取消相应回滚段中数据。p再根据回滚段中的数据,撤消未正常提交的事务的操作。再根据回滚段中的数据,撤消未正常提交的事务的操作。
48、2022-12-1367数据库原理图图7.6 Oracle7.6 Oracle的恢复过程的恢复过程(a)(a)发生故障,事务非正常终止发生故障,事务非正常终止 (b)(b)利用利用REDOREDO文件,重做所有操作文件,重做所有操作 (c)(c)利用回滚段撤消未提利用回滚段撤消未提交的事务交的事务,数据库恢复到数据库恢复到一致性状态一致性状态2022-12-1368数据库原理小小 结结n如果数据库只包含成功事务提交的结果,就说数据库处于一如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。保证数据一致性是对数据库的最基本的要求。致性状态。保证数据一致性是对数据库的最基本的要求。n事务
49、是数据库的逻辑工作单位事务是数据库的逻辑工作单位pDBMSDBMS保证系统中一切事务的原子性、一致性、隔离性和持保证系统中一切事务的原子性、一致性、隔离性和持续性续性nDBMSDBMS必须对事务故障、系统故障和介质故障进行恢复必须对事务故障、系统故障和介质故障进行恢复n恢复中最经常使用的技术:数据库转储和登记日志文件恢复中最经常使用的技术:数据库转储和登记日志文件n恢复的基本原理:利用存储在后备副本、日志文件和数据库镜恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库像中的冗余数据来重建数据库2022-12-1369数据库原理n常用恢复技术常用恢复技术p事务故障的恢复:事务故障的恢复:UNDOUNDOp系统故障的恢复:系统故障的恢复:UNDO+REDOUNDO+REDOp介质故障的恢复:重装备份并恢复到一致性状态介质故障的恢复:重装备份并恢复到一致性状态 +REDO+REDOn提高恢复效率的技术提高恢复效率的技术p检查点技术检查点技术 可以提高系统故障的恢复效率可以提高系统故障的恢复效率 可以在一定程度上提高利用动态转储备份进行介质故障可以在一定程度上提高利用动态转储备份进行介质故障恢复的效率恢复的效率n镜像技术镜像技术 镜像技术可以改善介质故障的恢复效率镜像技术可以改善介质故障的恢复效率