您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 第7讲 数据库的并发控制与恢复技术
1思考以下问题:1.多用户同时访问(并发操作)数据库会产生什么问题?2.如何进行并发控制?并发控制又会带来什么新问题?如何解决?3.数据库系统可能出现的故障有哪些?数据库的恢复技术又有哪些?丢失修改两个事务T1和T2读入同一数据并进行修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。2事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。不可重复读事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。读“脏”数据事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为脏数据,也就是说不正确的数据。34T1T2T1T2T1T21)读A=201)读A=50读B=100求和=1501)读C=100C←C*2写回C2)读A=203)A←A-1写回A=192)读B=100B←B*2写回B=2002)读C=2004)A←A-1写回A=19(A少减一次)3)读A=50读B=200和=250(验算不对)3)ROLLBACKC恢复为100(错误的C值已读出)(a)丢失修改(b)不可重复读(c)读“脏”数据事务的特征(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性或永久性(Durability)事务特性遭破坏的原因多个事务并行执行时,不同事务的操作交叉执行事务在运行过程中被强行停止5在SQL语言中,定义事务的语句有三条:BEGINTRANSACTION;COMMIT;ROLLBACKTRANSACTION;6数据库的并发控制就是控制数据库,防止多用户并发使用数据库时造成数据错误和程序运行错误,保证数据的完整性。封锁机制是并发控制的重要手段。封锁是使事务对它要操作的数据有一定的控制能力。7封锁具有3个环节①申请加锁,即事务在操作前要对它将使用的数据提出加锁请求;②获得锁,即当条件成熟时,系统允许事务对数据加锁,从而事务获得数据的控制权;③释放锁,即完成操作后事务放弃数据的控制权。8锁的类型①排它锁(ExclusiveLocks,简称X锁),也称为独占锁或写锁。一旦事务T对数据对象A加上排它锁(X锁),则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。②共享锁(ShareLocks,简称S锁),又称读锁。如果事务T对数据对象A加上共享锁(S锁),其他事务只能再对A加S锁,不能加X锁,直到事务T释放A上的S锁为止。9封锁协议在对数据对象加锁时,需要约定一些规则,例如,何时申请X锁或S锁、持锁时间、何时释放等,这些规则称为封锁协议。10一级封锁协议事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。作用:可有效地防止丢失修改,但不能保证可重复读和不读“脏”数据。1112事务1时间事务2读A=16t1t2读A=16A=A-1写回A=15t3t4A=A-1写回A=15事务1时间事务2XLOCKA读A=16t1t2XLOCKA等待A=A-1写回A=15COMMITUNLOCKAt3t4XLOCKA读A=15A=A-1写回A=14COMMITUNLOCKA二级封锁协议事务T对要修改数据必须先加X锁,直到事务结束才释放X锁;对要读取的数据必须先加S锁,读完后即可释放S锁。作用:不仅能够防止丢失修改,而且防止读“脏”数据,但不能保证可重复读。1314事务1时间事务2读B=100B=B+100写回B=200t1t2读B=200ROLLBACKB恢复为100t3t4继续使用B=200事务1时间事务2XLOCKB读B=100B=B+100写回B=200t1t2SLOCKB等待ROLLBACKB恢复为100UNLOCKBt3t4SLOCKB读B=1002级封锁协议防止了读“脏”数据的发生,在读数据时,还可能产生不可重复读的不一致性,这时需要3级封锁协议三级封锁协议事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。作用:不但防止了丢失修改和不读“脏”数据,而且防止了不可重复读。1516事务1时间事务2SLOCKC读C=50显示C=50UNLOCKCt1t2XLOCKC读C=50C=C*2写回C=100COMMITUNLOCKCSLOCKC读C=100显示C=100t3事务1时间事务2SLOCKC读C=50显示C=50t1t2XLOCKC等待读C=50显示C=50COMMITUNLOCKCt3t4XLOCKC读C=50C=C*2写回C=100不同级别的封锁协议17X锁S锁一致性保证操作结束释放事务结束释放操作结束释放事务结束释放不丢失修改不读“脏”数据可重复读一级协议√√二级协议√√√√三级协议√√√√√活锁在多个事务请求对同一数据封锁时,总是使某一用户等待的情况称为活锁。解决活锁的方法是采用先来先服务的方法,即对要求封锁数据的事务排队,使前面的事务先获得数据的封锁权。18死锁多事务交错等待的僵持局面称为死锁。解决死锁有两类方法:一是采用一定措施来预防死锁的发生;二是采用一定手段定期诊断系统中有无死锁,若有则解除之。19活锁20T1:LOCKR成功T2:LOCKR等待T3:LOCKR等待T1:UNLOCKRT3:LOCKR成功(T2等待)T4:LOCKR等待T3:UNLOCKRT4:LOCKR成功......T2永远等待T1:LOCKA成功T2:LOCKB成功T1:LOCKB等待T2:LOCKA等待......T1、T2相互等待•死锁诊断死锁的方法超时法或事务等待图法解除死锁的方法通常是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,使其他事务得以继续运行下去。同时,对撤销的事务所执行的数据修改操作加以恢复。21预防死锁的方法1.一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能继续执行。2.顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。22预防死锁的方法3.两段锁协议:(1)在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;(2)在释放一个封锁之后,事务不再申请并获得对该数据的封锁。23故障的种类①事务内部的故障事务内部的故障有的是可以通过事务程序本身发现的,但是更多的则是非预期的,它们不能由事务处理程序处理。例如运算溢出、并发事务发生死锁而被选中撤消该事务、违反了某些完整性限制等。②系统故障系统故障是指造成系统停止运转的任何事件,从而使得系统必须重新启动。③介质故障介质故障指外存故障,例如磁盘损坏、磁头碰撞,瞬时磁场干扰等。④计算机病毒计算机病毒是一种人为的故障或破坏。⑤用户操作错误由于用户有意或无意的操作也可能删除数据库中的有用的数据或加入错误的数据,这同样会造成一些潜在的故障。24数据恢复的实现技术1.数据转储(1)静态转储和动态转储。(2)海量转储和增量转储。2.登记日志文件(Logging)(1)日志文件的格式和内容。日志文件是用来记录对数据库的更新操作的文件。(2)日志文件的作用。日志文件的主要用于数据库恢复。当数据库文件毁坏后,可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,再利用日志文件,把已完成的事务进行重做处理。25
本文标题:第7讲 数据库的并发控制与恢复技术
链接地址:https://www.777doc.com/doc-3305435 .html