《数据库恢复技术》PPT课件.ppt

上传人:xin****828 文档编号:15493477 上传时间:2020-08-12 格式:PPT 页数:42 大小:917.50KB
返回 下载 相关 举报
《数据库恢复技术》PPT课件.ppt_第1页
第1页 / 共42页
《数据库恢复技术》PPT课件.ppt_第2页
第2页 / 共42页
《数据库恢复技术》PPT课件.ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
事务,如银行转帐问题:假定资金从帐户A转到帐户B,至少需要两步: 帐户A的资金减少然后帐户B的资金相应增加,创建数据库并开设两个账户,转账1000元,A转入B 1000元,创建帐户表, 存放用户的帐户信息,添加约束:根据银行规定,帐户余额不能少于1元,否则视为销户,模拟转帐,开户后两个帐户的 余额总和为:1000+1=1001元,模拟实现转帐 : 从张三的帐户转帐 1000元到李四的帐户,请问:执行转帐语句后,张三、李四的帐户余额为多少?,错误分析: 执行失败,故张三还是1000元 原因UPDATE语句违反约束:余额=1元 解决方法:使用事务,事务的概念,事务(Transaction): 事务是用户定义的一个数据库操作序列,这些操作作为一个不可分割的工作单元,要么全做,要么全不做。 数据库恢复和并发控制的基本单位 数据库系统中通常有多个事务并行运行 事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务,事务的特性(ACID特性),原子性(Atomicity) 事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行 一致性(Consistency) 事务在完成时,必须使所有的数据都保持一致状态,以保持所有数据的完整性。即所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。 隔离性(Isolation) 对并发执行的事务,一个事务的执行不能被其他事务干扰 各个事务之间不能互相干扰 在同一事务内部操作及使用的数据对其他并发事务是隔离的 持续性(Durability) 事务完成后,它对数据库的修改被永久保持,接下来的其他操作或故障不应该对其执行结果有任何影响。,DBMS中的事务控制,隐式的事务控制: 用户未显式地定义事务时,DBMS按缺省规定自动划分事务 说明:事实上,有时一条SQL语句的工作也有事务特点 例如一条删除多行数据的SQL语句。 显式的事务控制: 事物的开始与结束由用户显示地控制 实际开发中通常用显示事务,明确指定事务的起、止边界,SQL语言中定义事务的语句 Begin transaction事务开始 Commit事务提交,正常结束,将更新结果写入磁盘 COMMIT语句还释放资源,如事务使用的锁。 Rollback事务回滚,撤销事务中所有已完成的更新 当事务中出现错误,或者用户决定取消事务时,可回滚该事务,将数据返回到事务开始时的状态,并释放事务占用的资源,使用事务解决银行转帐问题,判断某条语句执行是否出错: 使用全局变量ERROR可判断当前SQL语句执行是否有错 为判断事务中所有SQL语句是否有错,可对错误进行累计;如: SET errorSum =errorSum +error,查看转帐1000的结果,事务管理的内容,引起事务不完全的三个故障原因: 由于出现异常,中途中止或不成功退出; 可能因电源等故障,系统崩溃; 遇到如不能访盘等异常状态而中止。 ACID准则的保证: 不仅在系统正常如此,在系统故障时也应如此;在单个事务执行时如此,在事务并发执行时也应如此。 故障恢复: 保证事务在故障时满足ACID准则的技术; 并发控制: 保证事务在并发执行时满足ACID准则的技术; 事务管理:故障恢复和并发控制的合称。,五.并发控制,为什么需要并发控制 数据库系统是多用户共享的系统; 数据库管理系统必须提供并发控制机制; 多个用户并发地存取数据库时会产生多个事务同时存取同一数据的情况。,实例分析:考虑飞机订票系统中的一个活动序列 1)甲售票点(甲事务)读出某航班的机票余额A,设A=16; 2)乙售票点(乙事务)读出同一航班的机票余额A,也为16; 3)甲售票点卖出一张机票,修改余额A=A-1;所以A为15,把A写回数据库; 4)乙售票点也卖出一张机票,修改余额A=A-1;所以A为15,把A写回数据库。 结果明明卖出两张机票,数据库中机票余额只减少1。,多事务执行方式,(1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 特点:不能充分利用资源,数据库资源难以共享 (2)交叉并发方式(interleaved concurrency) 并行执行事务的各个操作轮流交叉运行 特点:在单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率 (3)同时并发方式(simultaneous concurrency) 多个处理机同时运行,其中每个处理机分别运行一个事务,能实现多个事务真正并行运行 特点:最理想的并发方式,但受制于硬件环境,三类不一致性(1/2),并发操作带来的数据不一致性包括三类: 丢失修改、不可重复读和读“脏”数据,丢失修改 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失。 读“脏”数据 事务1修改某一数据,并写回磁盘 事务2读取同一数据后 事务1因某种原因被撤消,这时事务1已修改过的数据恢复原值 事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称“脏”数据。,三类不一致性(2/2),不可重复读:指事务T1读取数据后,事务T2执行更新操作,使事务T1无法再现前一次读取结果。,三类不可重复读 T1读取某一数据后: 1. T2对其做了修改,当T1再次读该数据时,得到与前一次不同的值; 2. T2删除了其中部分记录,当T1再次读取数据时,发现某些记录神密地消失了; 3. T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象,原因及解决,产生三类数据不一致性的主要原因: 并发操作破坏了事务的隔离性。 并发控制: 就是要用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。 调度:“事务集”中的一串有序操作集。 对调度的要求: 一个事务中的操作在调度中的顺序,应该与它们在事务中的顺序一致。 每个事务最后的行动:COMMIT和ROLLBACK。,并发控制的主要技术:封锁(Locking),封锁,什么是封锁 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术,基本封锁类型 排它锁又称写锁(eXclusive lock简记为X锁) 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁 共享锁又称读锁(Share lock记为S锁) 若事务T对数据对象A加上S锁,则其它 事务只能再对A加S锁,而不能加X锁, 直到T释放A上的S锁,Y=Yes,相容的请求 N=No,不相容的请求,封锁协议,封锁协议:对数据对象加锁时,要遵循的约定规则。主要解决: 何时申请X锁或S锁和持锁时间、何时释放 常用封锁协议:三级封锁协议,1级封锁协议 事务在修改数据前,必须先加X锁,直到事务结束(提交或回滚)才释放 作用: 1级封锁协议可防止丢失修改 缺陷: 在1级封锁协议中, 若是读数据,不需要加锁的,所以它不能保证不读“脏”数据和可重复读。 T2在之前读的A,可能“脏” 或与在中读的不一致,2级封锁协议,2级封锁协议: 1级封锁协议+事务T在读取数据R前必须先加S锁,读完后即释放S锁 作用: 可以防止丢失修改和读“脏”数据。 缺陷: 由于读完数据后即可释放S锁,故不能保证可重复读。,3级封锁协议,1级封锁协议+事务在读取数据前先加S锁,直到事务结束才释放,可防止:丢失修改、读脏数据和不可重复读,不读“脏”数据,可重复读,封锁协议小结,三级协议的主要区别 什么操作需要申请封锁 何时释放锁(即持锁时间),活锁和死锁,封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题:可能引起活锁和死锁。,活锁: 在多个事务请求对同一数据封锁时,总是使某一用户事务等待的情况称为活锁。 避免活锁的法: 采用先来先服务的策略。,死锁,死锁:多事务交错等待的僵持局面。 产生死锁的原因: 两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。 解决死锁的两类方法: 预防死锁的发生; 定期诊断系统中有无死锁,有则解除。,死锁的预防 1) 一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能继续执行。 2) 顺序封锁法:预先规定数据对象的封锁顺序,所有事务都按该顺序封锁。,预防死锁的方法,一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行 存在的问题:将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度 顺序封锁法 顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。,存在的问题: 维护成本高:数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象,处理方法 允许发生死锁,一旦检测出死锁,就予以解除,死锁的诊断与解除,超时法 若一个事务的等待时间超过规定的时限,就认为发生了死锁。 优点:实现简单 缺点:时限太短可能误判;太长死锁发生后不能及时发现 事务等待图法 事务等待图是一个有向图G=(T,U)。 T为结点的集合,每个结点表示正运行的事务; U为边的集合,每条边表示事务等待情况。 若T1等待T2,则从T1指向T2划一条有向边。,并发控制子系统周期性地(如每隔1 min)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。 解除死锁 撤消处理死锁代价最小的一个事务,释放此事务持有的所有的锁,并发调度的可串行性,可串行化的调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。 正确调度:可串行化是并发调度正确性的唯一准则。,串行 调度,不可串行化的调度,可串行化的调度,两段锁协议,两段封锁协议(Two-Phase Locking,简称2PL) 最常用的一种封锁协议,理论上证明使用两段封锁协议产生的是可串行化调度,其并行执行的结果一定是正确的 两段锁协议 在对任何数据进行读、写操作前,事务要先获得对该数据的封锁;在释放一个封锁后,事务不再申请和获得任何其他封锁 “两段”锁的含义 第一阶段:获得封锁,也称为扩展阶段 事务可申请获得数据项上任何类型的锁,但不释放任何锁 第二阶段:释放封锁,也称为收缩阶段 事务可释放数据项上任何类型的锁,但不能再申请任何锁,例如:事务Ti遵守两段锁协议,其封锁序列是 : Slock A Slock B Xlock C Unlock B Unlock A Unlock C | 扩展阶段 | | 收缩阶段 |,封锁粒度,封锁粒度:封锁对象的大小 封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象: 逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等 物理单元:页(数据页或索引页)、物理记录等 选择封锁粒度原则: 封锁粒度与系统的并发度和并发控制的开销密切相关; 封锁的粒度越大,数据库所能封锁的数据单元就越少,并发度就越小,系统开销也越小; 封锁的粒度越小,并发度较高,但系统开销也就越大 多粒度封锁: 在一个系统中同时支持多种封锁粒度供不同的事务选择,意向锁,意向锁的含义: 若对一结点加意向锁,则说明该结点的下层结点正在被加锁 对任一结点加基本锁,必须先对它的上层结点加意向锁 如: 对任一元组加锁时,要先对所在的数据库和关系加意向锁 三种常用的意向锁: IS锁:对一数据对象加IS锁, 表示其后裔结点拟(意向)加S锁 如: 要对表R1中某元组加S锁, 则要先对R1和数据库加IS锁 IX锁:若对一数据对象加IX锁, 表示其后裔结点拟(意向)加X锁 如:要对表R1中某元组加X锁, 要首先对R1和数据库加IX锁,SIX锁: 若对一数据对象加SIX锁, 表示对其加S锁, 再加IX锁 如: 对表R1加SIX锁, 表示该事务要读整个表(故要对该表加S锁), 同时会更新个别元组(故要对该表加IX锁),SQL Server中的锁与加锁,SQL Server的死锁检测与处理: SQL Server自动检测死锁;一旦有死锁发生,则将其中一个导致死锁较次的事务杀死。 锁粒度:整个库、表级 、页级(2KB)和行级 锁方式:共享;排它TABLOCKX;更新UPDLOCK等 带共享锁HOLDLOCK的SELECT: 能保证在SELECT语句完成前,或一个含多条SQL语句的事务回退或提交前一直对指定的一个或多个表保持有共享锁。,为防止死锁,编程时应注意如下事项: 尽量使事务简洁,花时少; 少用HOLDLOCK特别是当事务中需与用户交互时最好不用; 避免同时多于一个用户对同一数据页互操作; 两个事务对两个数据页的访问顺序一致。,六.备份与恢复,数据库恢复概述 数据库由于某些故障发生可能会导致数据库被破坏或影响数据库中数据的一致性(或完整性、正确性); 当系统运行过程中发生故障时,数据库恢复技术将数据库从错误状态恢复到某个一致状态,它是数据库可靠性的保证; 数据库恢复机制是衡量某DBMS系统性能的指标之一,对系统可靠性起决定作用,对运行效率有很大影响。,故障的种类 事务内部故障: 事务在运行至正常终止点(提交或回滚)前被终止 能由事务所在程序处理的,如条件不满足等 不能由事务所在程序处理的, 如运算溢出、违反完整性限制等 系统故障:系统重启、OS故障、DBMS代码错误、掉电等 介质故障(medium):磁盘损坏等 计算机病毒(virus),数据恢复原理,恢复操作的基本原理 恢复操作的基本原理:冗余 利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据 恢复的实现技术:复杂 一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上 恢复机制涉及的关键问题 1. 如何建立冗余数据,最常用的技术是: 数据转储(backup) 登录日志文件(logging) 通常在一个数据库系统中,这两种方法是一起使用的。 2. 如何利用这些冗余数据实施数据库恢复,数据转储,数据转储:指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程;备用的数据称为后备副本或后援副本。 如何使用转储数据: 数据库遭到破坏后可以将后备副本重新装入 重装后备副本只能将数据库恢复到转储时的状态 转储方法分类: DBA一般在夜间或周末,周期性(天.周.月)转储DB到磁带上。,日志文件,什么是日志文件 日志文件(log)是用来记录事务对数据库的更新操作的文件 日志文件的格式 以记录为单位的日志文件内容 各个事务的开始标记和相应的结束标记 各个事务的所有更新操作的内容包括: 事务标识、操作类型(插入、删除或修改)、 操作对象(记录内部标识)、 更新前数据的旧值(对插入操作,此项为空值) 更新后数据的新值(对删除操作,此项为空值) 以上均作为日志文件中的一条日志记录 (log record) 以数据块为单位的日志文件,每条日志记录的内容: 事务标识(标明是那个事务),被更新的数据块,登记日志文件,基本原则 登记的次序严格按并行事务执行的时间次序 必须先写日志文件,后写数据库 写日志文件:把表示修改的日志记录写到日志文件 写数据库:把对数据的修改写到数据库中 为什么要先写日志文件 写数据库和写日志是不同的操作, 其间可能发生故障 若先写数据库修改,而在日志文件中没有登记下该修改,则以后就无法恢复该修改; 若先写日志而未修改数据库,则恢复时,对故障发生时已提交的事务按日志文件重作,对未提交的事务进行撤销,即可时仅保证数据库的正确性,恢复策略,事务故障的恢复 事务故障:事务在运行至正常终止点前被中止 恢复方法:由恢复子系统利用日志文件,撤消此事务已对数据库进行的修改 事务故障的恢复由系统自动完成,不需要用户干预 系统故障的恢复 首先正向扫描日志文件,生成重做(Redo)和撤消(Undo)队列 然后对Undo队列中的各事务进行Undo 最后对Redo队列中的各事务进行Redo 恢复由系统在重新启动时自动完成,不需要用户干预 介质故障的恢复 首先装入最新后备副本和有关日志文件副本;然后重作已提交的事务,使数据库恢复至故障前某一时刻的一致状态 装入副本由DBA介入完成,并执行DBMS提供的恢复命令,具有检查点的恢复技术,引入检查点的原因(CheckPoint) 搜索整个日志将耗费大量的时间 REDO处理:重新执行,浪费了大量时间 具有检查点的恢复技术 在日志文件中增加检查点记录; 内容包括:建立检查点时刻所有正在执行的事务标识和这些事务最近一个日志记录的地址 增加重新开始文件: 用来记录各个检查点记录在日志文件中的地址,动态维护日志文件: 周期性地执行(定期或不定期) 建立检查点,保存数据库状态,利用检查点的恢复策略,建立检查点的步骤 将当前日志缓冲中的所有日志记录写入磁盘的日志文件; 在日志文件中写入一个检查点记录; 将当前数据缓冲区的所有数据记录写入磁盘的数据库中; 把检查点记录在日志文件中的地址写入一个重新开始文件。,使用检查点恢复技术进行恢复的步骤 从“重新开始文件”中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录; 由该检查点记录得到检查点建立时所有正在执行的事务清单; 从检查点开始扫描日志文件,将未提交事务加入撤销(Undo)队列,将已提交事务加入重做(Redo)队列; 对Undo队列中的各事务进行Undo,再对Redo队列中的各事务进行Redo。,实例:恢复子系统采取的策略,恢复策略: T1在检查点之前已提交,所以不必执行REDO操作 T2和T3在检查点之后才提交,其对数据库所做的修改在故障发生时可能还在缓冲区中,未写入数据库,所以要REDO T4和T5在故障发生时还未完成,所以予以撤销,不要REDO,REDO,撤销,REDO,撤销,数据库镜像,介质故障是对系统影响最为严重的一种故障 严重影响数据库的可用性;介质故障恢复比较费时 数据库镜像:是提高数据库可用性的解决方案 当主数据库更新时,DBMS自动将整个数据库或其中的关键数据进行磁盘备份,以保证镜像数据与主数据的一致性,优缺点: 介质故障时:使用镜像磁盘中的数据,同时DBMS自动利用镜像数据进行数据库快速恢复 没有故障时:可用于并发操作,某用户加排他锁时,其他用户可读镜像数据,不必等锁释放 缺点:频繁地复制数据自然会降低系统运行效率,实际应用时,常仅选关键数据和日志文件镜像,SQL Server的数据备份与恢复机制,SQL Server支持的备份类型: 完整数据库备份:包括事务日志在内的整个数据库 差异数据库备份:只记录自上次完整数据库备份后发生更改的数据。 事务日志备份 日志备份序列提供了连续的事务信息链,可支持从数据库、差异或文件备份中快速恢复数据。 数据库文件和文件组备份 以文件和文件组作为备份的对象,但在使用这种备份模式时,应搭配事务日志备份一起使用。,数据库进行备份和恢复操作的方式。 1) 静态的备份和恢复方式。在进行数据备份或恢复操作时,SQL服务器不接受任何应用程序的访问请求,只执行备份或恢复操作。 2) 动态的备份和恢复方式。在进行数据备份或恢复操作时,SQL服务器同时接受应用程序的访问请求。,备份数据库,1)右击要备份的数据库;在弹出单上选择“全部任务”中的“备份数据库”项。 2) 在常规卡中:选要备份的数据库;确定备份文件的存放位置;选择将备份保存到备份设备时的覆盖模式 3)设置“完成后验证备份”复选框。,数据恢复方法,(1)用鼠标右键击要进行数据恢复的数据库。在弹出单中选择“所有任务”中的“还原数据库”项。 (2)恢复数据库:选择要恢复的数据库和要还原的第1个备份文件,小结,DB的完整性控制包括: 完整性约束的定义、检查和处理。当用户对DB进行更新操作时,系统会检查用户的操作是否违反了完整性约束,若违反了完整性约束,就采取一定的措施来保证数据的完整性。 DB的安全性: 保护数据防止非法使用所造成的数据泄露、更改或破坏。 DB的安全性控制主要方法:用户验证、存取控制。 多个事务的并发调度: 带来丢失更新、不一致分析、未提交依赖等问题,从而影响并发调度的正确性。 解决问题的方法:封锁,封锁又分为排它锁和共享锁。 在封锁的过程中,还会发生活锁和死锁现象。 常见的故障类型: 事务故障、系统故障和介质故障。,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!