13春第10章数据库恢复技术s.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第10章数据库恢复技术任课教师:唐蕾Email:tanglei_xz@163.com江苏师范大学计算机与科学技术学院2020/1/151本章内容概要•一、事务的基本概念•二、故障的种类•三、恢复的实现技术•四、恢复策略•五、数据库镜像2020/1/152本章教学要求•掌握–事务的概念、特性–数据库恢复技术–日志文件的概念、作用•了解–数据库各类故障–恢复的基本策略2020/1/153一、事务的基本概念•1.什么是事务•2.如何定义事务•3.事务的特性2020/1/154事务的提出银行转账系统A=2000B=1000Read(A);A=A-100;Write(A);Read(B);B=B+100Write(B)Output(B)Output(A)断电或其他故障故障时,数据库中A,B值分别为多少?那么重新启动时,要么A因为再执行一遍而为1800,要么B因从未执行而保持原值。2020/1/1551.什么是事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务是恢复和并发控制的基本单位一个事务可以是一条SQL语句、一组SQL语句或整个程序。事务和程序是两个概念:一个应用程序通常包含多个事务。事务的开始与结束可以由用户显式控制。2020/1/1562.如何定义事务•显式定义方式(SQL语言)–BEGINTRANSACTION:事务开始–COMMIT:提交,事务正常结束•提交事务的所有操作(读+更新)。•事务中所有对数据库的更新永久生效。–ROLLBACK:撤销,事务异常终止•事务运行的过程中发生了故障,不能继续执行。•回滚事务的所有更新操作。•事务回滚到开始时的状态。隐式方式:当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务。2020/1/1583.事务的特性(ACID特性)•执行的原子性(Atomicity)–事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。•功能上的一致性(Consistency)–事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。•彼此的隔离性(Isolation)–一个事务的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰。•作用的持续性(Durability)–一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。2020/1/159破坏事务特性示例读A=16A←A-3写回A=13①读A=16②③A←A-1写回A=15④T2T1T1的修改被T2覆盖了!原因:交叉执行。2020/1/1510破坏事务特性的因素多个事务并行运行时,不同事务的操作交叉执行。事务在运行过程中被强行停止。数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性。数据库管理系统必须保证被强行终止的事务对数据库和其它事务没有任何影响。(并发控制)(恢复)2020/1/1511二、故障的种类•1.事务内部的故障•2.系统故障•3.介质故障•4.计算机病毒2020/1/15121.事务故障•什么是事务故障–某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了。•事务故障的常见原因–输入数据有误–运算溢出–违反了某些完整性限制–某些应用程序出错–并行事务发生死锁2020/1/1513BEGINTRANSACTION读账户甲的余额BALANCE;BALANCE=BALANCE-AMOUNT;IF(BALANCE0)THEN{打印‘金额不足不能转账’;ROLLBACK;(撤销刚才的修改,恢复事务,’UNDO’)}ELSE{读账户乙的BALANCE1;BALANCE1=BALANCE1+AMOUNT;写回BALANCE1;COMMIT;}2020/1/1514事务故障的恢复•发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘,因此,数据库可能处于不正确状态。•恢复程序要在不影响其它事务运行的情况下,强行回滚ROLLBACK)该事务,即撤销该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。这类恢复操作称为事务撤消(UNDO)。事务故障的恢复:撤消事务(UNDO)2020/1/15152.系统故障•什么是系统故障–整个系统的正常运行突然被破坏。–所有正在运行的事务都非正常终止。–内存中数据库缓冲区的信息全部丢失。–外部存储设备上的数据未受影响。•系统故障常见原因–操作系统或DBMS代码错误。–操作员操作失误。–特定类型的硬件错误(如CPU故障)。–突然停电。2020/1/1516系统故障的恢复•清除尚未完成的事务对数据库的所有修改–系统重新启动时,恢复程序要强行撤消(UNDO)所有未完成事务。•将缓冲区中已完成事务提交的结果写入数据库–系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务。2020/1/15173.介质故障•介质故障的常见原因–磁盘损坏–磁头碰撞–操作系统的某种潜在错误–瞬时强磁场干扰•介质故障的影响–硬件故障使存储在外存中的数据部分丢失或全部丢失。–并影响正在存取这部分数据的所有事务。•介质故障的恢复–装入数据库发生介质故障前某个时刻的数据副本。–重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库。2020/1/1518三、恢复的实现技术•1.恢复技术原理•2.数据转储•3.登记日志文件2020/1/15191.恢复技术原理•恢复操作的基本原理:–利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据。•恢复机制涉及的关键问题1.如何建立冗余数据•数据转储(backup)•登录日志文件(logging)2.如何利用这些冗余数据实施数据库恢复冗余2020/1/15202.数据转储•什么是转储–指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。•转储的用途–供介质故障恢复时使用:一旦系统发生介质故障,数据库遭到破坏,可以将后备副本重新装入,把数据库恢复起来。•转储方法–静态转储与动态转储–海量转储与增量转储2020/1/1521转储和恢复图示转储运行事务故障发生点正常运行─┼───────┼─────────────TaTbTf重装后备副本重新运行事务恢复─┼───────┴------------→图10.1转储和恢复2020/1/1522静态转储•什么是静态转储–在系统中无运行事务时进行转储。–转储期间不允许对数据库进行任何存取、修改活动。–转储开始和结束时数据库处于一致性状态。•优点–实现简单。•缺点–降低了数据库的可用性。运行事务Ta转储Tb运行事务数据库状态一致2020/1/1523动态转储•什么是动态转储–转储操作与用户事务并发进行。–转储期间允许对数据库进行存取或修改。•优点–不用等待正在运行的用户事务结束。–不会影响新事务的运行。•动态转储的缺点–不能保证副本中的数据正确有效。运行事务Ta转储Tb运行事务数据库状态不一致运行事务2020/1/1524利用动态转储副本进行恢复•需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件。•后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态。运行事务故障发生点动态转储运行事务↓正常运行─┼───────┼─────────────TaTbTf重装后备副本利用日志文件恢复恢复━━━━━━╋━━━┥2020/1/1525海量转储与增量转储•海量转储–每次转储全部数据库。•增量转储–只转储上次转储后更新过的数据。•海量转储与增量转储比较–从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便。–但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。2020/1/15263.登记日志文件•日志文件的格式和内容•日志文件的作用•登记日志文件的原则2020/1/1527日志文件的格式和内容•什么是日志文件–日志文件(log)是用来记录事务对数据库的更新操作的文件。•日志文件的格式–以记录为单位的日志文件。–以数据块为单位的日志文件。2020/1/1528日志文件的格式和内容•以记录为单位的日志文件内容–各个事务的开始标记(BEGINTRANSACTION)–各个事务的结束标记(COMMIT或ROLLBACK)–各个事务的所有更新操作–与事务有关的内部更新操作•以数据块为单位的日志文件内容–事务标识–被更新的数据块2020/1/1529日志记录的内容•基于记录–事务标识–操作类型(插入、删除或修改)–操作对象(记录ID、BlockNO.)–更新前数据的旧值(对插入操作而言,此项为空值)–更新后数据的新值(对删除操作而言,此项为空值)•基于数据块–事务标识(标明是那个事务)–操作对象(记录ID、BlockNO.)–更新前数据所在的整个数据块的值(对插入操作而言,此项为空值)–更新后整个数据块的值(对删除操作而言,此项为空值)2020/1/1530日志文件的作用•进行事务故障恢复•进行系统故障恢复•协助后备副本进行介质故障恢复–与静态转储后备副本配合进行介质故障恢复。–在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。2020/1/1531利用日志文件恢复图示故障发生点静态转储运行事务↓正常运行─┼──────┼──────────┼──TaTbTf登记日志文件└───────────┴──重装后备副本利用日志文件恢复事务继续运行介质故障恢复─────────┴-------------┴──────登记日志文件└──────2020/1/1532登记日志文件的原则(1)登记的次序严格按并行事务执行的时间次序。(2)必须先写日志文件,后写数据库。–写日志文件操作把表示这个修改的日志记录写到日志文件。–写数据库操作:把对数据的修改写到数据库中。2020/1/1533为什么要先写日志文件•写数据库和写日志文件是两个不同的操作•在这两个操作之间可能发生故障•如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了。•如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。2020/1/1534四、恢复策略•1.事务故障的恢复•2.系统故障的恢复•3.介质故障的恢复2020/1/15351.事务故障的恢复事务故障的恢复由系统自动完成,不需要用户干预,步骤如下:1.反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。2.对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”(BeforImage,BI)写入数据库。–插入操作,“更新前的值”为空,则相当于做删除操作–删除操作,“更新后的值”为空,则相当于做插入操作–若是修改操作,则用BI代替AI(AfterImage)3.继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。4.如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。2020/1/15362.系统故障的恢复系统故障的恢复由系统在重新启动时自动完成,不需要用户干预。步骤如下:1.正向扫描日志文件(即从头扫描日志文件)REDO队列:在故障发生前已经提交的事务T1,T3,T8…..UNDO队列:故障发生时尚未完成的事务T2,T4,T5,T6,T7,T9…...2.对UNDO队列事务进行UNDO处理反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作T2,T4,T5,T6,T7,T9……3.对REDO队列事务进行REDO处理正向扫描日志文件,对每个REDO事务重新执行登记的操作T1,T3,T8…..2020/1/15373.介质故障的恢复1.装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。–对于静态转储的数据库副本,装入后数据库即处于一致性状态–对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。2.装入有关的日志文件副本,重做已完成的事务。–首先扫描日志文件,找出故障发生时已提交的事务的标识,将

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功