您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 华南理工大学-计算机学院-数据库-实验四-报告
华南理工大学《数据库》课程实验报告实验题目:实验四:事务的管理姓名:学号:班级:17计科一班组别:无合作者:无指导教师:董守玲实验概述【实验目的及要求】实验目的:1)通过编写事务隔离级别的测试程序了解事务并发控制机制2)学会进行数据库的备份与恢复。实验要求:1.采用实验一的建库脚本和数据插入脚本创建Student数据库。2.测试事务隔离级别,要求:分别设置不同的隔离级别,让两个并发事务交错执行的程序或事务,能分别显示每种隔离级别下,是否出现丢失更新,脏读,读值不可复现以及幻象记录四种情况。提示:OracleSETTRANSACTIONISOLATIONLEVELSERIALIZABLE;SETTRANSACTIONISOLATIONLEVELREADCOMMITTED;SETTRANSACTIONISOLATIONLEVELREADONLY;SQLServerSETTRANSACTIONISOLATIONLEVELSERIALIZABLESETTRANSACTIONISOLATIONLEVELREPEATABLEREADSETTRANSACTIONISOLATIONLEVELREADCOMMITTEDSETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED3.备份与恢复1)备份数据库2)删除sc表3)恢复到删除之前4.提交实验报告:实验报告包括实验过程和实验结果截屏,各种SQL脚本,测试过程的详细说明与分析。【实验环境】PC机,WINDOWS操作系统,Oracle或MicrosoftSQLServer数据库实验内容【实验过程】一、实验步骤:(1)打开数据库,建立连接。(2)选择要使用数据库(3)分别设置四种不同的隔离级别(以上过程需要同时在两个终端进行)(4)设计不同隔离级别下的一致性或者不一致性的表现形式,使用两个终端配合实现。(5)测试实验数据(6)操作的调整,及再次验证(7)备份数据库(8)删除数据库(9)恢复数据库(10)实验的总结与收获二、实验数据和主要过程:1.采用实验一的建库脚本和数据插入脚本创建Student数据库。2.测试事务隔离级别,要求:(本过程通过开启两个终端实现)分别设置不同的隔离级别,让两个并发事务交错执行的程序或事务,能分别显示每种隔离级别下,是否出现丢失更新,脏读,读值不可复现以及幻象记录四种情况。(1)读未提交1)设置读未提交代码:2)丢失更新:(无丢失更新)事务一事务二(此时,王明为计算机系)事务1更新Students表“王明”为“经济系”,未提交;事务2更新Students表“王明”为“数学系”提交;有写锁,更新无法成功结果仍为之前结果3)读脏:代码:事务一事务二(此时,王明为经济系)事务1更新王明为“计算机系”未提交;事务1回滚事务2第一次读取王明数据;再次读取王明是数据恢复,即致使事务2读取不正确的数据。4)不可重复读:代码:事务1事务2(此时,王明为经济系)事务1读取王明数据事务1再次读取王明数据,则与前一次不一样。事务2改写王明为“计算机系”提交;5)幽灵:代码:事务1事务2(此时王明数据存在,为计算机系)事务1读取王明数据;事务1再次读取王明数据,则无结果事务2删除王明数据,提交(2)读提交1)设置读提交代码:2)丢失更新:(无丢失更新)代码:事务一事务二(此时,王明为计算机系)事务1更新Students表“王明”为“经济系”,未提交;事务2更新Students表“王明”为“数学系”提交;有写锁,更新无法成功结果仍为之前结果3)读脏:(无读脏)代码:事务一事务二(此时,王明为计算机系)事务2读取王明数据不成功,因为事务1还未提交读脏:事务1更新王明为“经济系”未提交4)不可重复读:代码:事务1事务2(此时,王明为经济系)事务1读取王明数据事务1再次读取王明数据,则与前一次不一样。事务2改写王明为“计算机系”提交;5)幽灵:代码:事务1事务2(此时王明数据存在,为计算机系)事务1读取王明数据;事务1再次读取王明数据,则无结果事务2删除王明数据,提交(3)可重复读1)设置可重复读代码:2)丢失更新:(无丢失更新)代码:事务一事务二(此时,王明为计算机系)事务1更新Students表“王明”为“经济系”,未提交;事务2更新Students表“王明”为“数学系”提交;有写锁,更新无法成功结果仍为之前结果3)读脏:(无读脏)代码:事务一事务二(此时,王明为计算机系)读脏:事务1更新王明为“经济系”未提交事务2读取王明数据不成功,因为事务1还未提交4)不可重复读:(无不可重复读)代码:事务一事务二(此时,王明为计算机系)事务1读取王明数据事务2改写王明为“经济系”不成功,因为事务1还未提交5)幽灵:代码:事务1事务2(此时王明数据存在,为计算机系)事务1读取王明数据;事务1再次读取王明数据,则无结果事务2删除王明数据,提交(4)可串行化1)设置可串行化代码:色拉2)丢失更新:(无丢失更新)代码:事务一事务二(此时,王明为计算机系)事务1更新Students表“王明”为“经济系”,未提交;事务2更新Students表“王明”为“数学系”提交;有写锁,更新无法成功结果仍为之前结果3)读脏数据(无读脏数据)代码:事务一事务二(此时,王明为计算机系)读脏:事务1更新王明为“经济系”未提交事务2读取王明数据不成功,因为事务1还未提交4)不可重复读:(无不可重复读)代码:事务一事务二(此时,王明为计算机系)事务1读取王明数据事务2改写王明为“经济系”不成功,因为事务1还未提交5)幽灵:(无幽灵)代码:事务一事务二(此时王明数据存在)事务1读取王明数据事务2删除王明数据不成功,因为事务1读取还未提交;3.备份与恢复1)备份数据库导出.sql文件lab.sql内容2)删除sc表6)恢复到删除之前恢复语句重新查看SC表小结通过这次实验,我对老师在理论课上讲授的并发控制的概念和内容有了更进一步的明晰。包括对于数据库并发控制中四种隔离级别的理解,对于并发控制中的不一致性的具体理解,对于数据库的备份和恢复的重要性的理解等。其中,尤其是对于并发控制的不一致性的理解,因为是自己设计情景一验证相关的理论和现象,所以在之后对于相关概念,在实验之后得到了很好的理解。而通过这一系列的操作,我对于相关的理论和实现的存在性和重要性也有了更进一步的认识。有一个小插曲,在撰写实验报告的时候,电脑出现问题,不得不重启。而之前的报告即将完成,但没有保存过。结果,在重新打开文档的时候果然丢失了大部分内容。在沮丧与焦急之时,想起老师讲授过的数据库备份和恢复的知识,就想文档编辑软件是否也有相同的功能。在网上进行资料查阅之后,发现在一个目录下有不定时备份文件,在进行备份恢复之后,虽然没有复原所有内容,但是问题得到了一定的解决。由此,对于数据库相关操作的重要性,也有了更进一步的认识。实验过程中的一些概念难以辨析,现将相关内容总结成表格如下,以方便明晰和记忆:由实验及课堂理论可知,读脏数据不可重复读幽灵枷锁要求读未提交YYY写锁,读不加所读提交NYY写锁,读锁读完后释放可重复读NNY2PL协议可串行化NNN2PL,页节点索引所保持现将实验过程中获得的一些编程技巧总结如下:(1)事务隔离级别的查看:select@@tx_isolation;(2)事务隔离级别的设置:1)读未提交:setsessiontransactionisolationlevelreaduncommitted;2)读提交:setsessiontransactionisolationlevelreadcommitted;3)可重复读:setsessiontransactionisolationlevelrepeatableread;4)可串行化:setsessiontransactionisolationlevelserializable;(3)事务是否自动提交的设置(事务的开始和结束):1)自动恢复:setautocommit=1;2)不自动恢复:setautocommit=0;最后,通过这次实验认识到实践出真知的道理。许多概念在课堂上学习的时候,有一部分死记硬背的过程。而通过实验,对于该问题为什么会出现,它的重要性,它的具体情景,它的应对操作都有了更加立体的了解和深入的认识。关于数据库的学习,除了最重要的基本知识,优化,并发,恢复等技巧,重要的部分还是在于编程实践。在真正的实践过程中,常常能获得一些在理论课上学习不到的,能够帮助我们真正了解相关概念,也能在程序实现是带给我们成就感,激发我们学习学习兴趣。感谢这次实验过程带给我们的收获。指导教师评语及成绩评语:成绩:指导教师签名:批阅日期:
本文标题:华南理工大学-计算机学院-数据库-实验四-报告
链接地址:https://www.777doc.com/doc-5598654 .html