1、第七章,数 据 库 恢 复 技 术,要点,事务 故障及其类型 数据库恢复实现技术 数据库恢复策略,7.1 事务的基本概念,事务(Transaction) 用户定义的一个对数据库读写操作序列 一个不可分割的工作单位 数据库恢复和并发控制的基本单位 数据库系统中通常有多个事务并行运行 在关系数据库中,事务可以是一条、一组SQL语句,或整个程序 事务和程序的区别? 程序包含多个事务,SQL语言中定义事务的语句,事务的开始和结束可以由用户显式控制。如果用户没有定义,则由DBMS按缺省规定自动划分事务。 SQL定义事务的语句 Begin transaction(事务开始) Commit(事务提交,正常结
2、束,将更新结果写入磁盘) Rollback(事务回滚,撤销事务中所有已完成的更新),BEGIN TRANSACTION读账户甲的余额balance;balance = balance amount; /amount为转账金额if (balance 0) then打印金额不足,不能转账;ROLLBACK; /撤销刚才的修改,恢复事务else读账户乙的金额balance1;balance1 = balance1 + amount;写回balance1;COMMIT;,事务示例,为什么要 定义事务?,事务的性质(ACID特性),原子性(Atomicity) 事务中的操作要么都做,要么都不做 (All
3、 or None) 一致性(Consistency) 事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态 与原子性密切相关 隔离性(Isolation) 并发执行的各事务不能相互干扰 持续性/永久性(Durability) 事务一旦提交,它对数据库的更新不再受后继操作或故障的影响 DBMS中事务处理必须保证其ACID特性,这样才能保证数据库中数据的安全和正确,事务型DBMS中必备的机制,事务是恢复和并发控制的基本单位 恢复机制与并发控制机制的提出 事务在运行过程中因某种故障被强行终止,数据库一致性被破坏,需进行恢复 多个事务并行运行时,不同事务的各种操作交叉进行,为保证各事务的执行
4、互不干扰,需进行并发控制,7.2 数据库恢复概述,数据库由于某些故障发生可能会导致数据库被破坏或影响数据库中数据的一致性(或完整性、正确性) 当系统运行过程中发生故障时,数据库恢复技术将数据库从错误状态恢复到某个一致状态,它是数据库可靠性的保证。 数据库恢复机制是衡量某DBMS系统性能的指标之一,对系统可靠性起决定作用,对运行效率有很大影响,7.3 故障的种类,事务内部故障 事务在运行至正常终止点(commit或rollback)前被终止 包括 能由事务所在程序处理的,如条件不满足等 不能由事务所在程序处理的,如运算溢出等 系统故障(system) 系统重启、OS故障、DBMS代码错误、掉电等
5、 介质故障(medium) 磁盘损坏等 计算机病毒(virus),非预期故障,各类故障对数据库的可能影响,数据库本身被破坏,使数据库中全部或部分数据丢失 如系统故障、介质故障、计算机病毒等 数据库没有被破坏,但因事务的运行被非正常终止而使数据库数据失去一致性(正确性) 如事务内部故障、系统故障、计算机病毒等,7.4 恢复的实现技术,数据库恢复的基本原理 利用存储在系统别处的冗余数据来重建 恢复技术的两个关键 如何建立冗余数据 数据转储 登录日志文件 如何利用冗余数据恢复数据库,建立冗余数据的方法一,数据转储:定期进行磁盘备份形成后备副本 具体方法如下示意 由DBA 定义适当的转储周期,每次转储
6、全部数据库,每次转储更新过的数据,转储和用户事务可以并发执行,转储期间不执行任何用户事务,建立冗余数据的方法二,登记日志文件(Logging) 日志文件:记录事务对数据库的更新操作 以记录为单位的日志文件 事务的开始标记,事务的结束标记 各个事务的所有更新操作 事务标识TransID, 操作类型UpdateType, 操作对象RecordID, 更新前的旧值OldValue, 更新后的新值NewValue 以数据块为单位的日志文件 事务标识,被更新的数据块,登记日志文件必须遵循的原则,登记的次序严格按并发事务执行的时间次序 必须先写日志文件,后写数据库 (Write After Logging
7、, WAL),恢复的实现,通常在一个数据库中综合使用数据转储和登录日志文件这两种方法,配合使用后备副本和日志文件进行数据库恢复,利用日志文件进行数据库恢复,事务故障恢复和系统故障恢复须用日志文件 通常综合数据库后备副本和日志文件将数据库恢复至某个一致状态(视转储方法而定) 恢复时,对故障发生时已提交的事务进行重做(Redo,再执行),而对未提交的事务进行撤销(Undo,逆操作),7.5 恢复策略,事务故障的恢复 反向扫描日志文件,Undo事务中的更新操作 由系统自动完成 系统故障的恢复 首先正向扫描日志文件,生成Redo和Undo队列 然后对Undo队列中的各事务进行Undo 最后对Redo队
8、列中的各事务进行Redo 由系统在重启时自动完成 介质故障的恢复 首先装入最新后备副本和有关日志文件副本,Redo已提交的事务,使数据库恢复至故障前某一时刻的一致状态 装入副本由DBA介入完成,并执行DBMS提供的恢复命令,7.6 具有检查点的恢复技术,引入检查点的原因(CheckPoint) 减少对日志记录的搜索和Redo处理,改善恢复效率 具有检查点的恢复技术 在日志文件中增加检查点记录,其内容包括 建立检查点时刻所有正在执行的事务标识和这些事务最近一个日志记录的地址 增加重新开始文件 用来记录各个检查点记录在日志文件中的地址 动态维护日志文件:周期性地执行(定期或不定期) 建立检查点,保
9、存数据库状态,建立检查点的步骤,将当前日志缓冲中的所有日志记录写入磁盘的日志文件。 在日志文件中写入一个检查点记录。 将当前数据缓冲区的所有数据记录写入磁盘的数据库中 把检查点记录在日志文件中的地址写入一个重新开始文件。,使用检查点恢复技术进行恢复的步骤,从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录 由该检查点记录得到检查点建立时刻所有正在执行的事务清单 从检查点开始扫描日志文件,将未提交事务加入Undo队列,将已提交事务加入Redo队列 对Undo队列中的各事务进行Undo,再对Redo队列中的各事务进行Redo,实例:恢复子系统采取的
10、不同策略,T1,T2,T3,T5,T4,时间,系统故障,检查点,不要REDO,REDO,撤销,REDO,撤销,7.7 数据库镜像(Mirror),概念 数据库镜像为避免介质故障造成的损失而提出 由DBA提出要求或当主数据库更新时,DBMS自动将整个数据库或其中的关键数据进行磁盘备份,以保证镜像数据与主数据的一致性,数据库镜像的优缺点,介质故障时,DBMS可自动利用镜像数据进行数据库快速恢复; 无故障时,镜像数据可用于并发操作时的数据访问 建立镜像时,频繁大量的复制会影响系统运行效率。通常仅对关键数据和日志文件镜像,镜像,应用,应用,应用,应用,更新,更新,复制,恢复,读,读,P261 1,3,4,5,8,10,11,12,思考,