




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1回顾事务的概念及特性事务的操作2系统恢复(补充)计算机系统故障是不可避免的。发生故障的原因多样,如硬件故障、恶意破坏等。一旦故障发生,会对数据库中的数据造成破坏,因此,DBMS必须采取措施,以保障即使发生故障,也必须使数据库恢复到故障发生前的某一个状态,称为系统恢复技术。3系统恢复1.单纯以后备复本为基础的恢复技术
周期性地把数据库中数据转储到磁盘上。这就是后备复本。复本虽造成数据冗余,但是对恢复来说是必需的。当数据库失效时,可取最近的后备复本来恢复数据库。
缺点:最近后备复本至发生故障期间所发生的数据库更新就会丢失,且取后备复本的周期愈长,丢失的数据更新也就愈多。4系统恢复2.以后备复本和运行记录为基础的恢复技术(1)前像
当数据库被一个事务更新时,所涉及的物理块被更新前的映像称为该事务的前像。(2)后像当数据库被一个事务更新时,所涉及的物理块被更新后的映像称为该事务的后像。5系统恢复数据库的表结构:Student(StuID,StuName,StuAge,StuSex,StuCity,StuScore,DepID)Department(DepID,DepName,Total)判断以下事务的前像、后像各是什么?事务T将学生A00001从1系转入2系,有3个操作组成:①updatestudentsetDepID=2whereStuID=‘A00001’②updateDepartmentsetTotal=Total+1whereDepID=2③updateDepartmentsetTotal=Total-1whereDepID=1以后备复本和运行记录为基础的恢复技术6①updatestudentsetDepID=2whereStuID='A00001'②updateDepartmentsetTotal=Total-1whereDepID=1③updateDepartmentsetTotal=Total+1whereDepID=2DepID=1前像后像DepID=2Total=100Total=100Total=99Total=101操作①操作②操作③t以后备复本和运行记录为基础的恢复技术7DepID=1前像后像DepID=2Total=100Total=100Total=99Total=101操作①操作②操作③t保存COMMIT故障undo操作:以前像为参照,反向扫描日志,做逆操作恢复数据。执行commit前数据已保存到数据库,但此时还未执行commit发生了故障;以后备复本和运行记录为基础的恢复技术8DepID=1前像后像DepID=2Total=100Total=100Total=99Total=101操作①操作②操作③tCOMMIT保存故障redo操作:以后像为参照,正向扫描日志,做正操作恢复数据。执行commit后数据才会被保存到数据库,但在commit之后保存数据库之前发生了故障;9系统恢复3.基于多副本的恢复技术
如果系统中有多个数据库副本,可以利用这些副本互为备份,用于恢复。常用于分布式数据库系统中。
读数据时,可以选择其中任一个结点上的数据;
写数据时,每个结点都写入同样的内容。
10练习1:有某数据库系统在运行过程中发生了系统故障,发生故障时正在运行事务t1和t2。进行故障恢复时,在日志文件中发现有t1事务的开始记录而没有结束记录;有t2的开始记录和结束记录,但t2对数据库的修改还没有写到数据库中。如何恢复数据库到一致状态?11练习2:具有检查点的恢复技术Tc(保存点)Tf(系统故障)
REDOUNDOUNDO
REDOT2T3T4T5什么都不做T112思考:写一个事务执行售票点售票功能。每个售票点售票完成需要2个步骤,首先查看数据库中票的张数是否大于0,如果大于0,则售票后更新数据库票的张数。售票信息存在表Ticket(TicketInfo,TicketLeaveNum)中。13思考:解决方案:CREATEPROCprcSellTicket@TicketInfovarchar(20),--车次信息@TicketNumint--售出张数AS…BegintranDeclare@TicketLeaveNumintSelect@TicketLeaveNum=TicketLeaveNumfromTicketWhereTicketInfo=@TicketInfo--①waitfordelay'00:00:20'UpdateTicketsetTicketLeaveNum=@TicketLeaveNum–@TicketNumWhereTicketInfo=@TicketInfo--②If(@TicketLeaveNum<@TicketNum) beginrollbacktranprint'售票失败'endElse beginCommittranprint'售票成功'end14思考:TicketT001,16售票点A售票点B时刻1时刻2时刻3时刻4①read,16②read,16…
…
③16-1=15,writetoDB④16-1=15,writetoDB15思考:TicketT001,15售票点A售票点B时刻1时刻2时刻3时刻4①read,16②read,16…
…
③16-1=15,writetoDB④16-1=15,writetoDB168.5.1并发的概念:
多个用户在执行相同的事务时,会导致数据库中的数据发生错误信息,这种情况称为事务的并发。17事务的并发
多个用户在执行相同的事务时,事务会产生并发情况,从而导致数据库中的数据发生错误信息,实际中我们应该考虑到并发的存在,并试图解决这种并发情况。解决方案:1.锁机制2.设置事务的隔离级别18并发问题的控制—锁机制共享锁排他锁
共享锁又称为读锁、S锁。又称为写锁、X锁。
T1
SXSYNXNNX锁、S锁的相容矩阵
T219并发问题的控制—排他锁TicketT001,16售票点A售票点B时刻1时刻2时刻3时刻4时刻5时刻6①获得X锁read,16…
③获得X锁read,15
②16-1=15,writetoDBcommit
释放x锁事务TA事务TB申请X锁等待等待等待④15-1=14,writetoDBcommit
释放x锁…
20并发问题的控制—共享锁TicketT001,16售票点A售票点B时刻1时刻2时刻3时刻4时刻5时刻6①获得S锁read,16…(释放S锁)
…释放S锁
③16-1=15,writetoDBcommit
事务TA事务TB申请S锁获得S锁②read,16④16-1=15,writetoDBcommit21修改后的事务—锁机制CREATEPROCprcSellTicket@TicketInfovarchar(20),--车次信息@TicketNumint--售出张数ASBegintranselectTicketLeaveNumfromTicketwith(tablockx)Declare@TicketLeaveNumintSelect@TicketLeaveNum=TicketLeaveNumfromTicketWhereTicketInfo=@TicketInfo--①waitfordelay'00:00:20.005'UpdateTicketsetTicketLeaveNum=@TicketLeaveNum–@TicketNumWhereTicketInfo=@TicketInfo--②If(@TicketLeaveNum<@TicketNum) beginrollbacktranprint‘售票失败‘endElsebeginCommittranprint‘售票成功‘end为Ticket表加排他锁22并发问题的控制——隔离级别(1)未提交读(readuncommitted)(2)已提交读(readcommitted)(3)可重复读(repeatableread)(4)可序列化(serializable)23未提交读当前事务其他事务读能读,能修改修改能读,不能修改规则:售票点A售票点B时刻1时刻2时刻3时刻4①read,16②read,16…
…
③16-1=15,writetoDB④16-1=15,writetoDB事务TA事务TB24已提交读当前事务其他事务读能读,能修改修改不能读,不能修改规则:售票点A售票点B时刻1时刻2时刻3时刻4①read,16②read,16…
…
③16-1=15,writetoDB④16-1=15,writetoDB事务TA事务TB25可重复读当前事务其他事务读能读,不能修改修改不能读,不能修改规则:售票点A售票点B时刻1时刻2时刻3时刻4①read,16②read,16…
…
等待等待事务TA事务TB26可序列化当前事务执行完另一事务才能开始,可解决所有并发情况。27隔离级别及其作用隔离级别脏读丢失更新不可重复读幻读未提交读是是是是已提交读否是是是可重复读否否否是序列化否否否否设置隔离级别:settransactionisolationlevel{隔离级别}28修改后的事务—设置隔离级别CREATEPROCprcSellTicket@TicketInfovarchar(20),--车次信息@TicketNumint--售出张数ASBegintranDeclare@TicketLeaveNumintSelect@TicketLeaveNum=TicketLeaveNumfromTicketWhereTicketInfo=@TicketInfo--①waitfordelay'00:00:20.005'UpdateTicketsetTicketLeaveNum=@TicketLeaveNum–@TicketNumWhereTicketInfo=@TicketInfo--②If(@TicketLeaveNum<@TicketNum) beginrollbacktranprint‘售票失败‘endElsebeginCommittranprint‘售票成功‘endsettransactionisolationlevelrepeatableread29串行调度T1①readA=1000A=A-50writeA②readB=2000B=B+50writeBT2③readA=950T=50A=A-TwriteA④readB=2050B=B+TwriteBT1①readA=1000A=A-50writeA
③readB=2000B=B+50writeBT2②readA=950T=50A=A-TwriteA
④readB=2050B=B+TwriteB并发调度30事务的并发(补充)
并非所有并行执行的多个事务都会产生并发情况,如果多个事务同时执行并不会产生并发错误,那么加上锁或隔离级别会降低执行效率。如何有效地判断多个事务是否会并发呢?
事务并发产生的错误主要有三类:丢失更新、不可重复读和脏读。31丢失更新T1①readA=16
③A=A-1writeAT2②readA=16
④A=A-1writeA思考:丢失更新的根源是什么?结论:在事务提交前的同一个时间段出现了多个事务的写操作,会造成并发错误。写-写冲突32不可重复读T1①read(x)③read(x)
T2②write(x-1)T1①read(x)write(x-1)
③rollbackT2②read(x)
脏读结论:
一个事务写另一个尚未提交且在读的事务;或一个事务读另一个已更新且尚未提交的事务会造成并发错误。读-写冲突33串行调度T1①readA=1000A=A-50writeA②readB=2000B=B+50writeBT2③readA=950T=50A=A-TwriteA④readB=2050B=B+TwriteBT1①readA=1000A=A-50writeA
③readB=2000B=B+50writeBT2②readA=950T=50A=A-TwriteA
④readB=2050B=B+TwriteB并发调度34思考:什么样的调度不会产生并发问题T1①readA=1000A=A-50writeA②readB=2000B=B+50writeBT2③readA=950T=50A=A-TwriteA④readB=2050B=B+TwriteBT1①readA=1000A=A-50writeA
③readB=2000B=B+50writeBT2②readA=950T=50A=A-TwriteA
④readB=2050B=B+TwriteB35准则(补充):DBMS把可串行化作为并发控制正确性的准则!!!判断是否可串行化的方法是前趋图。36练习:T1read(A)write(A)
read(B)write(B)read(B)T2read(A)write(A)
wirte(B)read(B)冲突冲突不冲突不冲突37事务并发处理的判断-T1②readxT2③ready⑤wirtexT3①writey
④writex⑥writezT4⑦readz⑧writex前趋图38事务并发处理的判断调度序列:W3(y)R1(x)R2(y)W3(x)W2(x)W3(z)R4(z)W4(x)解决方案:(1)找出冲突操作对:R1(x)W3(x)、R1(x)W2(x)、R1(x)W4(x)、W3(x)W2(x)、W3(x)W4(x)、W2(x)W4(x)、W3(y)R2(y)、W3(z)R4(z)(2)根据冲突操作对画前驱图:(3)如果前驱图无回路,则并发处理不影响执行结果。T1T2T3T439事务并发处理-等价串行化调度调度序列:W3(y)R1(x)R2(y)W3(x)W2(x)W3(z)R4(z)W4(x)解决方案:R1(x)W3(y)W3(x)W3(z)R2(y)W2(x)R4(z)W4(x)T1T2T3T440作业1:T1①readA=16
③A=A-1writeAT2②readA=16
④A=A-1writeA思考:使用前趋图判断T1和T2事务能否并发完成?41作业2(2010上半年软考试题):
某航空售票系统负责所有本地起飞航班的机票销售,并设有多个机票销售网点,各售票网点使用相同的售票程序。假设有两个旅客在两个不同的机票销售网点同时预定同一个航班A的机票x,则:Ri(x)表示某个机票销售网点读剩余机票数x;Wi(x-j)表示某个机票销售网点售出j张机票后修改剩余机票
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福州黎明职业技术学院《水土资源规划与管理》2023-2024学年第二学期期末试卷
- 辽阳职业技术学院《大数据技术原理及应用》2023-2024学年第二学期期末试卷
- 博尔塔拉职业技术学院《医药数理统计》2023-2024学年第二学期期末试卷
- 泰州2025年江苏泰州市人民医院招聘42人笔试历年参考题库附带答案详解
- 山东中医药高等专科学校《日语综合》2023-2024学年第二学期期末试卷
- 沧州医学高等专科学校《工程流体力学B》2023-2024学年第二学期期末试卷
- 《归园田居(其一)》教学设计 2024-2025学年统编版高中语文必修上册
- 多功能轻质复合板项目效益评估报告
- 上海民远职业技术学院《书法实训》2023-2024学年第二学期期末试卷
- 重庆第二师范学院《大数据与数据分析》2023-2024学年第二学期期末试卷
- 华为培训教程01网络基础
- 脑梗合并心衰护理查房
- 新星诺亚外语学校剑桥少儿英语一级上册期中测试题
- QCT 291-2023 汽车机械式分动器总成性能要求和台架试验方法 (正式版)
- 浙教版劳动八年级下册全册教案教学设计
- 盘扣式脚手架培训课件
- 2024年中国血糖健康管理行业白皮书
- 文华财经“麦语言”函数手册
- 大班数学PPT课件《实物填补数》
- 乳痛症的健康宣教
- GB/Z 43281-2023即时检验(POCT)设备监督员和操作员指南
评论
0/150
提交评论