如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
数据库原理及应用数据库保护事务管理概况UPDATEAccountsSETbalance=balance–xWHEREaccount_id='A‘UPDATEAccountsSETbalance=balance+xWHEREaccount_id='B'DBMS中的事务控制:事务控制语句使用示例二.事务的ACID准则(2)一致性(Consistency):在无其它事务并发执行时,单独运行的事务应保证DB从一个一致状态转到另一个一致状态,但事务内勿需保证一致性。该特性的一部分需由用户负责。三.事务管理的内容一、并发控制4、并发操作的问题•读脏数据•不可重读5、解决方案——加锁(2)三级封锁协议•一级封锁协议任一事务在修改某数据前,必须对其加上X锁,该事务结束后才释放。不采用S锁,读取数据不用加锁。该协议可以解决丢失更新,但不能解决读脏数据和不可重读的问题。•二级封锁协议符合一级封锁协议,且任一事务在读取某数据前,必须对其加上S锁,读完后就释放。该协议可以解决丢失更新、读脏数据,但不能解决不可重读的问题。•三级封锁协议符合一级封锁协议,且任一事务在读取某数据前,必须对其加上S锁,该事务结束后才释放。该协议可以解决丢失更新、读脏数据以及不可重读的问题。(3)加锁请求的选择策略•活锁当多个事务同时申请对数据的封锁时,由于选择策略的问题导致长时间甚至永远的等待,称为活锁。如随机选择或先来后服务(即堆栈方式)的策略。•死锁在选择策略正确的情况下,出现的相互永远等待的封锁请求,称为死锁。•死锁的预防法(1)一次封锁法即事务执行前将所有需要或可能需要的数据进行封锁,若全部封锁成功则执行,若不成功则全部放弃封锁。优点:防止了死锁的发生。缺点:不仅增加了封锁的申请时间,执行时也延长了其它事务的等待时间,从而降低了系统的并发性。(2)顺序封锁法即对所有数据对象规定一个顺序,任何事务必须按照此顺序来申请封锁,若对某一数据对象封锁失败,则只能等待或放弃已申请成功的封锁,不得对后序的数据对象申请封锁。优点:不仅可以防止死锁的发生,也可以兼顾到并发性。缺点:数据对象的封锁顺序很难确定。•死锁的解决法由于预防死锁在数据库中并不适合,因此,广泛采用的方法是死锁的诊断和解除。(1)死锁的诊断超时法预先规定一个最大等待时间,超过该时间就认为是死锁,但该时间长了,不能及时发现死锁,而时间短了又容易误判。等待图法画出一个有向图,若出现回路就认为是死锁。(2)死锁的解除按照一定的原则选择其中一个死锁的事物,将其回滚。被回滚的事物必须等待一段时间才能重新执行,以免再次死锁。选择的原则是:最近执行的;封锁数据对象最少的;回滚代价最小的。6、并发操作的正确性准则——可串行性7、选择封锁规模——多粒度封锁•封锁方式显式封锁直接加到某数据对象的封锁。隐式封锁某数据对象的上级或下级数据对象被显式封锁,则该数据对象被隐式封锁。因此,对某数据对象封锁前,不仅要检查其显式封锁,还要检查其隐式封锁,从而降低了封锁效率。8、提高封锁效率——意向锁各类锁的相容矩阵二、数据库恢复技术•系统故障如停电、硬件故障、系统软件故障、人为误操作等,使所有正在执行的事务异常终止。此时,计算机必须重新启动。故障恢复手段2)日志文件法即将所有更新事务记入日志文件。更新时,必须先写入日志记录,再执行更新。日志文件有三类记录:•标志事务开始的记录•标志事务结束的记录(注明COMMIT或ROLLBACK)•标志更新操作的记录,格式为(事务标识,操作类型,更新前数据旧值,更新后数据新值)其中操作类型有INSERT、DELETE、UPDATE三种。故障恢复的方法2)系统故障的恢复可根据日志文件由系统自动恢复。即将未完成的事务的更新操作撤消(UNDO),将已完成并提交了的事务重做(REDO)。方法是:当日志文件的记录达到一定数量时,系统自动将缓存中的内容存盘,并在日子文件中写入一个检查点记录。在出现系统故障时,从日志文件中的最后一个检查点开始执行恢复操作。故障恢复第一步(建立队列):找到日志文件的最后一个检查点记录,把其记录的所有正在进行的事务放入撤消(UNDO)队列。3)介质故障的恢复必须根据数据库备份文件和日志文件由人工参与恢复。首先重建数据库,并根据保存的日志文件来进一步恢复。然后,由人工重做日志文件以后的事务。随着磁盘技术的飞速发展,磁盘数据恢复技术也日新月异,因此,在实际的DBMS介质故障恢复工作中,使用的技术也不尽相同。概念:周期性(天、周)转储(Dump)DB到磁带上。备份时间:一般在夜间、周末;二.以后备副本和日志为基础的恢复技术事务状态:根据事务状态变迁,事务状态有:活动