《数据库》课件第8章-事务的并发.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《数据库》课件第8章-事务的并发.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课件 事务 并发
- 资源描述:
-
1、事务的概念及特性事务的概念及特性事务的操作事务的操作 计算机系统故障是不可避免的。发生故障的原因多样,如硬计算机系统故障是不可避免的。发生故障的原因多样,如硬件故障、恶意破坏等。一旦故障发生,会对数据库中的数据造成件故障、恶意破坏等。一旦故障发生,会对数据库中的数据造成破坏,因此,破坏,因此,DBMS必须采取措施,以保障即使发生故障,也必必须采取措施,以保障即使发生故障,也必须使数据库恢复到故障发生前的某一个状态,称为系统恢复技术。须使数据库恢复到故障发生前的某一个状态,称为系统恢复技术。1.单单纯纯以后备复本为基础的恢复技术以后备复本为基础的恢复技术2.以后备复本和运行记录为基础的恢复技术以
2、后备复本和运行记录为基础的恢复技术(1)前前像像当当数据库被一个事务更新时,所涉及的数据库被一个事务更新时,所涉及的物理物理块被更新块被更新前前的的映像称为该事务的前像映像称为该事务的前像。(2)后像后像 当数据库被一个事务更新时,所涉及的物理块被更新后当数据库被一个事务更新时,所涉及的物理块被更新后的映像称为该事务的后像。的映像称为该事务的后像。数据库的表结构:数据库的表结构:Student(StuID,StuName,StuAge,StuSex,StuCity,StuScore,DepID)Department(DepID,DepName,Total)判断以下事务的前像、后像各是什么?判断
3、以下事务的前像、后像各是什么?事务事务T将学生将学生A00001从从1系转入系转入2系,有系,有3个操作组成:个操作组成:update student set DepID=2 where StuID=A00001update Department set Total=Total+1 where DepID=2update Department set Total=Total-1 where DepID=1update student set DepID=2 where StuID=A00001update Department set Total=Total-1 where DepID=1up
4、date Department set Total=Total+1 where DepID=2DepID=1前像前像后像后像DepID=2Total=100Total=100Total=99Total=101操作操作操作操作操作操作tDepID=1前像前像后像后像DepID=2Total=100Total=100Total=99Total=101操作操作操作操作操作操作t 保存保存COMMIT故障故障undo操作操作:以前像为参照,反向扫描日志,做逆操作恢复数据。以前像为参照,反向扫描日志,做逆操作恢复数据。执行执行commit前数据已保存到数据库,但此时还未执行前数据已保存到数据库,但此时还
5、未执行commit发生了故障;发生了故障;DepID=1前像前像后像后像DepID=2Total=100Total=100Total=99Total=101操作操作操作操作操作操作tCOMMIT 保存保存故障故障redo操作操作:以后像为参照,正向扫描日志,做正操作恢复数据。以后像为参照,正向扫描日志,做正操作恢复数据。执行执行commit后数据才会被保存到数据库,但在后数据才会被保存到数据库,但在commit之后保存数据库之前发生了之后保存数据库之前发生了故障;故障;3.基于多副本的恢复技术基于多副本的恢复技术 如果系统中有多个数据库副本,可以利用这些副本互为备如果系统中有多个数据库副本,可
6、以利用这些副本互为备份,用于恢复。常用于分布式数据库系统中。份,用于恢复。常用于分布式数据库系统中。读数据时,可以选择其中任一个结点上的数据;读数据时,可以选择其中任一个结点上的数据;写数据时,每个结点都写入同样的内容。写数据时,每个结点都写入同样的内容。有某数据库系统在运行过程中发生了系统故障,发生故障时正有某数据库系统在运行过程中发生了系统故障,发生故障时正在运行事务在运行事务t1和和t2。进行故障恢复时,在日志文件中发现有。进行故障恢复时,在日志文件中发现有t1事事务的开始记录而没有结束记录;有务的开始记录而没有结束记录;有t2的开始记录和结束记录,但的开始记录和结束记录,但t2对数据库
7、的修改还没有写到数据库中。如何恢复数据库到一致对数据库的修改还没有写到数据库中。如何恢复数据库到一致状态?状态?Tc(保存点保存点)Tf(系统故障系统故障)REDOUNDOUNDO REDOT2T3T4T5什么都不做什么都不做T1写一个事务执行售票点售票功能。每个售票点售票完成需要写一个事务执行售票点售票功能。每个售票点售票完成需要2个步骤,个步骤,首先查看数据库中票的张数是否大于首先查看数据库中票的张数是否大于0,如果大于,如果大于0,则售票后更新数,则售票后更新数据库票的张数。售票信息存在表据库票的张数。售票信息存在表Ticket(TicketInfo,TicketLeaveNum)中。中
8、。解决方案:解决方案:CREATE PROC prcSellTicketTicketInfo varchar(20),-车次信息车次信息TicketNum int -售出张数售出张数ASBegin tranDeclare TicketLeaveNum intSelect TicketLeaveNum=TicketLeaveNum from TicketWhere TicketInfo=TicketInfo -waitfor delay 00:00:20Update Ticket set TicketLeaveNum=TicketLeaveNum TicketNumWhere TicketInf
9、o=TicketInfo -If(TicketLeaveNum TicketNum)begin rollback tran print 售票失败售票失败 endElse begin Commit tran print 售票成功售票成功 endTicketT001,16售票点售票点A售票点售票点B时刻时刻1 时刻时刻2时刻时刻3时刻时刻4read,16read,16 16-1=15,write to DB16-1=15,write to DB16-1=15,write to DB16-1=15,write to DBTicketT001,15售票点售票点A售票点售票点B时刻时刻1 时刻时刻2时刻
10、时刻3时刻时刻4read,16read,16 16-1=15,write to DB16-1=15,write to DB16-1=15,write to DB16-1=15,write to DB 多个用户在执行相同的事务时,会导致数据库中的数多个用户在执行相同的事务时,会导致数据库中的数据发生错误信息,这种情况称为事务的并发。据发生错误信息,这种情况称为事务的并发。多个用户在执行相同的事务时,事务会产生并发情况,多个用户在执行相同的事务时,事务会产生并发情况,从而导致数据库中的数据发生错误信息,实际中我们应该从而导致数据库中的数据发生错误信息,实际中我们应该考虑到并发的存在,并试图解决这种
11、并发情况。考虑到并发的存在,并试图解决这种并发情况。解决方案:解决方案:1.锁机制锁机制2.设置事务的隔离级别设置事务的隔离级别共享锁共享锁排他锁排他锁 共享锁又称为读锁、共享锁又称为读锁、S锁。锁。又称为写锁、又称为写锁、X锁。锁。T1 SXSYNXNNX锁、锁、S锁的相容矩阵锁的相容矩阵 T2TicketT001,16售票点售票点A售票点售票点B时刻时刻1 时刻时刻2时刻时刻3时刻时刻4时刻时刻5时刻时刻6获得获得X锁锁 read,16 获得获得X锁锁 read,15 16-1=15,write to DB16-1=15,write to DB commit commit 释放释放x x锁
12、锁事务事务TA事务事务TB申请申请X锁锁等待等待等待等待等待等待15-1=14,write to DB15-1=14,write to DB commit commit 释放释放x x锁锁 TicketT001,16售票点售票点A售票点售票点B时刻时刻1 时刻时刻2时刻时刻3时刻时刻4时刻时刻5时刻时刻6获得获得S锁锁 read,16(释放(释放S S锁)锁)释放释放S锁锁 16-1=15,write to DB16-1=15,write to DB commit commit 事务事务TA事务事务TB申请申请S锁锁获得获得S锁锁read,1616-1=15,write to DB16-1=1
13、5,write to DB commit commitCREATE PROC prcSellTicketTicketInfo varchar(20),-车次信息车次信息TicketNum int -售出张数售出张数ASBegin transelect TicketLeaveNum from Ticket with(tablockx)Declare TicketLeaveNum intSelect TicketLeaveNum=TicketLeaveNum from TicketWhere TicketInfo=TicketInfo -waitfor delay 00:00:20.005Upda
展开阅读全文