好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数据库事务管理综述.ppt

35页
  • 卖家[上传人]:ni****g
  • 文档编号:568775439
  • 上传时间:2024-07-26
  • 文档格式:PPT
  • 文档大小:121KB
  • / 35 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 数据库事务管理 事务(Transaction) o事务是构成单一逻辑工作单元的操作集合 o为什么需要事务的概念呢? n恢复的需要n并发操作的需要 o一、事务(Transaction)n用户定义的一个对数据库读写操作序列用户定义的一个对数据库读写操作序列n一个不可分割的工作单位一个不可分割的工作单位n数据库恢复和并发控制的基本单位数据库恢复和并发控制的基本单位n数据库系统中通常有多个事务并行运行数据库系统中通常有多个事务并行运行o事务和程序比较n在关系数据库中,一个事务可以是一条或多条在关系数据库中,一个事务可以是一条或多条SQL语句语句,也可以包含一个或多个程序也可以包含一个或多个程序n一个程序通常包含多个事务一个程序通常包含多个事务 事务的性质——ACIDo原子性(Atomicity)n事务中的操作要么都做,要么都不做事务中的操作要么都做,要么都不做 (All or None)o一致性(Consistency)n事务执行的结果必须使数据库从事务执行的结果必须使数据库从一个一致性状态一个一致性状态变到变到另一个另一个一致性状态一致性状态n与原子性密切相关与原子性密切相关o隔离性(Isolation)n并发执行的各事务不能相互干扰,这表明事务必须是独立的并发执行的各事务不能相互干扰,这表明事务必须是独立的o持续性/永久性(Durability)n事务一旦提交,它对数据库的修改被永久保持,不再受后继事务一旦提交,它对数据库的修改被永久保持,不再受后继操作或故障的影响操作或故障的影响★ DBMS中事务处理必须保证其ACID特性,这样才能保证数据库中数据的安全和正确。

      事务的操作n基于简化的表达方式,可把事务涉及的基本存取操作分为基于简化的表达方式,可把事务涉及的基本存取操作分为以下两种:以下两种:nread((X):从数据库中将数据对象):从数据库中将数据对象X读入到执行读入到执行read操作的操作的事务的一个局部缓冲区中事务的一个局部缓冲区中n write((X):从执行):从执行write的事务的局部缓冲区把数据对象的事务的局部缓冲区把数据对象X写入数据库写入数据库nwrite操作的结果可以暂时存储在内存中,操作的结果可以暂时存储在内存中,DBMS的恢的恢复子系统和底层操作系统协同控制,以决定写回磁盘的时复子系统和底层操作系统协同控制,以决定写回磁盘的时机机 事务管理 数据库事务管理由两部分功能构成:并发控制和恢复l并发控制(或调度)机制:保障在多个应用程序并发运行的情况下,它们之间互不干扰,产生正确的结果l恢复机制:保障在发生故障时,系统有一定的恢复能力,使数据库能恢复到故障前的正确一致状态 并发控制o并发控制机制的任务n对并发操作进行正确调度对并发操作进行正确调度n保证事务的隔离性保证事务的隔离性n保证数据库的一致性保证数据库的一致性 o并发操作带来的数据不一致性n丢失丢失修改修改((Lost Update))n不可重复读(不可重复读(Non-repeatable Read))n读读“脏脏”数据(数据(Dirty Read))干扰问题 并发操作引起的丢失修改T1读A=16A=A-1写回A=15T2读A=16A=A-1写回A=15机票销售机票销售n事务事务T1对数据的修改被事务对数据的修改被事务T2的修改覆盖的修改覆盖 并发操作引起的并发操作引起的不可重复读不可重复读n事务事务T1读取某一数据后,事务读取某一数据后,事务T2对其做了修改,当对其做了修改,当T1按按同样条件再读时得到不同的值同样条件再读时得到不同的值n事务事务T1读取某些数据后,事务读取某些数据后,事务T2删除删除(或插入或插入)了一些记了一些记录,当录,当T1按同样条件再读时发现少按同样条件再读时发现少(或多或多)了一些记录了一些记录(幻幻像读像读)T1读A=50,B=100求A+B=150读A=50,B=200求A+B=250T2读B=100B=B*2写回B=200银行系统银行系统 并发操作引起的读脏数据 事务T1 修改了某数据并写回磁盘,事务T2 读取了同一数据后,T1由于某种原因被撤销,被修改的值复原,此时T2读到的数据与数据库中的数据不一致。

      T1读C=100C=C*2写回C=200ROLLBACKC恢复为100T2读C=200 可串行性 可串行性通常看作是多个事务并发执行的正确性准则具体判定方法如下: 各单个事务如能将数据库从一个正确状态转变为另一个正确状态,则认为该事务是正确的; 按任何一个串行顺序依次执行多个事务也是正确的(这里的串行顺序假定各个事务间彼此独立、不交叉); 事务的交叉执行过程是正确的,当且仅当其与串行执行过程等价,则事务是可串行化的 并发控制的主要技术o封锁技术 (Locking) ★o时间戳技术(Timestamp)o其他:乐观控制法 封锁o事务T在对某个数据对象(如数据库、表、记录等)操作之前,首先向系统发出加锁请求以便获得对数据对象相应的控制o在事务T释放它所获得的锁之前,其他事务不能更新此数据对象 锁的分类o排它锁(eXclusive lock):写锁 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁o共享锁(Share lock):读锁 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

      T1T2T1T2T1T2Xlock A获得Xlock A读A = 16A = A -1写回A = 15CommitUnlock AXlock A等待等待 获得Xlock A读A = 15CommitUnlock A等待等待A = A -1写回A = 14Slock ASlock B读A = 50求和 = 150读A = 50CommitUnlock AXlock B等待等待 获得Xlock B读B = 100CommitUnlock B等待等待B = B * 2写回B = 200读B = 100读B = 100求和 = 150Unlock B等待等待等待等待Xlock C读C = 100C= C * 2写回C = 200Rollback(C恢复为100)Unlock CSlock C等待等待 获得Slock C读C = 100Commit Unlock C等待没有丢失修改没有丢失修改可重复读可重复读不读脏数据不读脏数据用用封封锁锁机机制制解解决决三三种种数数据据不不一一致致性性的的示示例例 死锁右图示意了两个并发事务所发生事件的序列,假设程序A为了完成某个事务需要封锁仓库和职工两个关系,而几乎在同一时刻并发执行的程序B为完成另一个事务也需要封锁职工和仓库关系,这两个程序正好按照如图所示的交错序列执行命令,结果两个程序都为了等待对方释放数据资源而产生死锁。

      死锁的预防o相同顺序法 n所有的用户程序约定都按相同的顺序来封锁表 o一次封锁法 n为了完成一个事务,一次性封锁所需要的全部表 o两阶段封锁协议 n所有事务都必须将对数据的封锁分为封锁和释放两个阶段 o一次封锁法存在的问题 降低系统并发度 难于事先精确确定封锁对象o顺序封锁法存在的问题 维护成本:数据库系统中封锁的数据对 象极多,并且在不断地变化 难以实现:很难事先确定每一个事务要封锁哪些对象 在操作系统上广为采用的预防死锁的策略并不很适合数在操作系统上广为采用的预防死锁的策略并不很适合数据库的特点,因此据库的特点,因此DBMS普遍采用诊断并解除死锁的办法普遍采用诊断并解除死锁的办法 死锁的诊断o超时法 即一个事务在等待的时间超过了规定的时限后就认为发生了死锁 这种方法非常不可靠,如果设置的等待时限长,则不能及时 发现死锁;如果设置的等待时限短,则可能会将没有发生死锁的事务误判为死锁o等待图法 即通过有向图判定事务是否是可串行化的,如果是则说明没有发生死锁,否则说明发生了死锁。

      具体思路是:用节点来表示正在运行的事务,用有向边来表示事务之间的等待关系,如果有向图中发现回路,则说明发生了死锁 解决死锁o发现死锁后解决死锁的一般策略是:自动使“年轻”的事务(即完成工作量少的事务)先退回去,然后让“年老”的事务(即完成工作量多的事务)先执行,等“年老”的事务完成并释放封锁后,“年轻”的事务再重新执行 事务隔离级别 隔离性虽然是事务的基本性质之一,但是彻底的隔离意味着并发操作效率的降低所以人们设想在避免干扰的前提下,适当地降低隔离的级别,从而提高并发的操作效率隔离级别越低,并发操作的效率越高,但是产生干扰的可能性也越大;隔离级别越高,则并发操作的效率越低,同时产生干扰的可能性也越小在设计应用时,可以在所能容忍的干扰程度范围内,尽可能的降低隔离级别,从而提高应用的执行效率 SQL标准中定义了下列四种隔离级别o未提交读(READ UNCOMMITTED):事务隔离的最低级别,仅可保证不读取物理损坏的数据,这是四个隔离级别中限制最小的级别 o提交读(READ COMMITTED):SQL Server默认级别,可以保证不读取“脏”数据。

      o可重复读(REPEATABLE READ):可以保证读一致性,避免不一致分析问题 o可串行化(SERIALIZABLE):事务隔离的最高级别,事务之间完全隔离;如果事务在可串行化隔离级别上运行,则可以保证任何并发重叠事务均是串行的 四种隔离级别所允许的不同类型的行为: 事务必须运行于可重复读或更高的隔离级别才可以防止丢失更新 封锁与隔离级别o可以通过指定隔离级别或对数据资源实施封锁达到事务隔离的目的;o封锁是实现并发操作的传统方法(在SQL标准中没有提及封锁),适当的运用封锁并保证高并发操作性能是一件非常复杂的工作,这需要用户深入了解各种封锁的相容性,并设计封锁的调度策略;oSQL标准中规定了事务的隔离级别,即未提交读、提交读、可重复读和可串行化,隔离级别解决了并发事务可能产生的丢失更新问题、未提交依赖问题、不一致分析问题和幻象读问题,其中为了避免丢失更新问题,事务必须运行在可重复读或可串行化隔离级别 o用户可以根据事务的需要设定隔离级别,结果由数据库管理系统控制封锁和进行并发操作调度 o在实际应用中,也可以将隔离级别和封锁结合起来使用例如,如果指定隔离级别是可重复读,则SQL会话中所有SELECT语句的锁定行为都运行于该隔离级别上,并一直保持有效,直到会话终止或者将隔离级别设置为另一个级别。

      如果必要,可以通过指定表级封锁来替代单个SELECT语句的隔离级别,指定表级封锁不会影响会话中的其他语句一般仅在绝对必要时才使用表级封锁更改默认的锁定行为 基于时间标记的并发控制技术Ø事务的时间标记:事务的时间标记:ts(T)Ø数据的时间标记:数据的时间标记:n读时间标记读时间标记trn写时间标记写时间标记twØ 事务事务T读数据读数据read(D);if ts(T) ≥twthen       /*符合时间标记协议,即符合时间标记协议,即  read(D)       为读取值为读取值*/tr := max(ts(T), tr);     else  /*已有比已有比T年轻的事务写入年轻的事务写入D,违反时间,违反时间                 标记协议,标记协议,T卷回卷回*/    rollback T and resart it with a new ts(T); Ø事务事务T写数据写数据Dif ts(T) ≥tr AND ts(T) ≥twthen        /*符合时间标记协议符合时间标记协议*/    {     write(D);     tw := ts(T);    }else        /*违反时间标记协议,违反时间标记协议,T应卷回应卷回*/    rollback T and resart it with a new ts(T); 乐观并发控制技术Ø事务事务Ti 的执行分成三个阶段的执行分成三个阶段.1.  读与执行阶段读与执行阶段: 事务事务Ti 的的write操作只写到临时局部操作只写到临时局部变量变量2.  有效性检查阶段有效性检查阶段: 事务事务Ti 执行执行“有效性检查有效性检查”来决来决定局部变量的值是否可以写到数据库而不违反可串行定局部变量的值是否可以写到数据库而不违反可串行化化3.  写阶段写阶段: 若若Ti 通过有效性检查通过有效性检查, 则更新数据库则更新数据库; 否否则则Ti 回滚回滚Ø并发执行的各事务的三个阶段可以交叉并发执行的各事务的三个阶段可以交叉, 但是每个事务但是每个事务必须按顺序通过三个阶段必须按顺序通过三个阶段Ø也称为也称为乐观并发控制乐观并发控制,因为事务执行时完全寄希望于在,因为事务执行时完全寄希望于在有效性检查时一切都好有效性检查时一切都好 恢复技术o事务故障 运算溢出、并发事务发生死锁而被选中撤消该事务、违反了某些完整性限制等o系统故障 特定类型的硬件错误(如CPU故障)、操作系统故障、DBMS代码错误、突然停电等等o介质故障 介质故障主要是指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等故障类型 恢复机制o故障恢复机制涉及两个关键问题是:故障恢复机制涉及两个关键问题是:ü第一,如何建立冗余数据第一,如何建立冗余数据ü第二,如何利用这些冗余数据实施数据库恢复第二,如何利用这些冗余数据实施数据库恢复 o建立冗余数据最常用的技术是建立数据备份建立冗余数据最常用的技术是建立数据备份和事务日志文件和事务日志文件o在数据库系统中,这两种方法通常是一起使在数据库系统中,这两种方法通常是一起使用的用的 数据库备份o备份又可以分为全备份,部分备份和增量备份3种方式o动态备份和静态备份o磁盘镜像 基于日志的恢复 日志是记录数据库中更新活动的结构,它记录了数据库中的所有更新活动。

      日志记录用于记录数据库的写操作和事务处理过程中的重要事件,包括事务开始日志记录、更新日志记录、事务提交日志记录和事务终止日志记录 发生事务故障后,事务故障恢复的步骤如下: (1)反向扫描日志,查找该事务的更新记录 (2)对事务的更新操作执行逆操作,将日志记录中的“改前值”写人数据库 (3)反复进行直到恢复到该事务的开始日志,则事务故障恢复结束 对于系统的故障恢复步骤如下: (1)正向扫描日志文件,将在故障发生前提交的事务的标识记人REDO队列;将故障发生时尚未完成的事务的标识记人UNDO队列 (2)对UNDO队列中的事务进行反向扫描,执行逆操作 (3)对REDO队列中的事务进行正向扫描,重新执行日志记录登记操作 参考文献[1] 刘易斯,基费尔,伯恩斯坦著;施伯乐, 周向东 ,方锦城译 数据库与事务处理[M]. 北京:机械工业出版社 2005[2] 段玉春 孙玉强 数据库管理系统中并发事务的控制方法[J].信阳师范学院学报(自然科学版) ,2004, 17(3)[3] 梁锐城. 数据库系统并发控制的研究[J]. 汕头大学学报(自然科学版), 1996, (01) [4] 吴婷婷,贾焰. 多库中并发控制的研究和实现[J]计算机工程与科学, 2001,(03) 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.