书签 分享 收藏 举报 版权申诉 / 38
上传文档赚钱

类型《数据库技术》课件第16章 事务处理与锁3.0.pptx

  • 上传人(卖家):momomo
  • 文档编号:5900397
  • 上传时间:2023-05-14
  • 格式:PPTX
  • 页数:38
  • 大小:940.24KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《数据库技术》课件第16章 事务处理与锁3.0.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    数据库技术 数据库技术课件第16章 事务处理与锁3.0 课件 16 事务处理 3.0
    资源描述:

    1、16事务处理与锁事务处理与锁事务在事务在DBMS中处于核心中处于核心地位地位 并发控制以事务为单位 数据库恢复以事务为单位2015-816-2Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁理论和实践主要贡献者理论和实践主要贡献者James Gray 1944.1.12,生于加州旧金山 19611966,BS,UCB,数学 Bell实验室,参与Multics项目 1969,PhD,UCB,程序语言 1973,IBM,参与System R项目 1995,Microsoft 因数据库和事务处理的贡献,获1998年度图灵奖 2007-01-28,失踪2015-816-

    2、3Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁James Gray2015-816-4Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁什么是事务什么是事务 事务是若干操作的集合。集合中的所有操作要么都完成,要么都取消。2015-816-5Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁事务举例事务举例超市付款超市付款 在超市买了一盒牙膏(5元),一袋洗衣粉(10元),最后付款,超市收银系统需要依次执行下面操作 牙膏库存量-1 洗衣粉库存量-1 你的银行卡余额-15 超市账户余额+15 以上四个操

    3、作要么都完成,要么都取消2015-816-6Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁事务的事务的ACID属性属性 Atomicity Correctness Isolation Durability2015-816-7Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁事务的两种基本操作事务的两种基本操作 commit 把重做缓冲区的数据写入重做文件 释放事务中的锁 把commit操作的scn号写入重做文件 rollback 把undo表空间中的旧数据替换新数据,撤销事务中的操作效果2015-816-8Oracle数据库系统原

    4、理数据库系统原理-第第16章章 事务处理与锁事务处理与锁commit背后背后 把重做缓冲区的数据写入重做文件 释放事务中的锁 把commit操作的scn号写入重做文件2015-816-9Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁DDL与与DCL的事务处理的事务处理方式方式 在执行的语句前后自动执行commit2015-816-10Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁SQL标准中的四种隔离标准中的四种隔离级别级别 read committed 只能读取到其他连接提交后的修改结果 read unommitted 读取

    5、到其他连接未提交的修改结果,Oracle支持 repeatable 事务中的第一次读取结果在第二次读取中不会改变 serializable 事务中的两次读取操作完全相同,Oracle支持2015-816-11Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁并发控制要解决并发控制要解决的的问题问题 丢失更新 脏读 不可重复读2015-816-12Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁丢失更新示例丢失更新示例 为了促销,超市要降低某商品的价格,降价条件有两个:若其当前价格高于 100 元,则把价格调整为原来的 1/2(即五折

    6、),若库存量高于 1000,则把价格调整为原来的 4/5(即八折),两个条件是独立的,如果两个条件都满足,价格五折后,再八折。如某商品当前价格为 200,库存量 1500,则降价的两个条件均满足,五折后,其价格降低至 100,再八折后,其价格降低至 80,这样其最后价格为 80。2015-816-13Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁丢失更新示例丢失更新示例 若工作人员 A 依据第一个条件调价,工作人员 B 依据第二个条件调价,分别使用两个连接,操作顺序如下:2015-816-14Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁

    7、事务处理与锁丢失更新示例丢失更新示例 两个工作人员各自完成上述操作后,工作人员 B 把 A 的修改结果覆盖了,导致最后价格不是 80,而是 160。虽然两个工作人员的操作步骤都是正确的,因为没有合适的并发控制,导致最后的结果是错误的。2015-816-15Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁脏读脏读 脏读是指一个连接读取了其他尚未提交的事务修改的数据。脏读破坏了事务的原子性,读取到的是事务进行过程中的中间结果,若此结果与事务结束时的结果不同,则此连接读取的是错误数据,如果以此错误数据为依据继续执行另外的任务,则可能造成一连串的错误。2015-816-

    8、16Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁脏读示例脏读示例 一顾客购买了 2 支钢笔、10 个笔记本,总价 100 元,收银员在连接 A 完成收银操作,超市采购员在连接 B 查询商品库存,确定某种商品是否需要进货。假定收银开始前,钢笔库存量为 100,笔记本库存量为 300,下面是两个连接在不同时间进行的操作:2015-816-17Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁不可重复读不可重复读 不可重复读是指一个事务中的查询操作因为分为多个步骤,导致其结果既包括了某个事务开始之前的数据,也包括了这个事务开始之后的数

    9、据,从而在最后得到了错误的查询结果。2015-816-18Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁不可重不可重复读复读示例示例 各帐号初始值2015-816-19Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁不可重不可重复读示例复读示例 用户 A 查询银行三个账号的余额总和。用户 B 由 acc3 账号转账 100 至 acc1。2015-816-20Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁Oracle对三个并发问题的对三个并发问题的解决方法解决方法 丢失更新:通过锁解决。脏读问题

    10、:通过多版本数据解决。不可重复读:通过多版本数据解决 把连接的事务隔离级别设置为 serializable,本连接的查询只能读取到事务开始之前的数据。2015-816-21Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁锁锁 锁是用来控制访问共享资源的一种机制 目的是把并发操作串行化2015-816-22Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁Oracle自动附加的锁自动附加的锁 DML锁(数据锁)保护修改的数据不被其他事务并发修改 DDL锁(数据字典锁)避免DDL语句操作的对象被其他用户修改而附加的锁 在DDL操作完成后

    11、,会自动执行commit操作 DDL锁持续的时间很短 内部栓锁(Internal locks and latches)内存中的临时锁2015-816-23Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁DML锁锁 TM(表锁)若一个表的某行记录被附加了TX锁,Oracle会自动在此表上附加TM锁 锁住被修改的表,防止其他事务对此表执行DDL语句 LOCK TABLE命令也可以手工附加TM锁 与DDL锁的区别?TX(行锁)UPDATE、INSERT、DELETE、MERGE以及SELECT.FOR UPDATE操作产生 对DML操作修改的每行记录附加 排他锁 TX

    12、锁直到事务结束时才释放2015-816-24Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁v$lock查询锁的信息查询锁的信息 type列表示锁的类型。type为TM时,v$lock中的id1字段表示锁住的对象id编号(object_id),通过dba_objects可以查询其所对应的对象名称。type为TX时,id1及id2列表示获得锁的事务信息。ctime列表示锁持续的时间。2015-816-25Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁v$lock查询示例查询示例SQL select sid,username fro

    13、m v$session 2 where username=SCOTT 3 /SID USERNAME-140 SCOTTSQL select sid,type,id1,id2 from v$lock 2 where sid=140 3 /SID TY ID1 ID2-140 AE 99 0 140 TM 19993 0 140 TX 458774 6122015-816-26Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁v$lock查询示例查询示例SQL col object_name for a15SQL select object_id,object_na

    14、me from dba_objects 2 where object_id=19993 3 /OBJECT_ID OBJECT_NAME-19993 DEPT2015-816-27Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁死锁死锁2015-816-28Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁 两个或多个事务同时处于等待状态,每个事务都在等待另一个事务释放对某个资源锁定后才能继续自己的操作。死锁的产生死锁的产生 R1和R2表示两种需要锁定的资源2015-816-29Oracle数据库系统原理数据库系统原理-第第16章章

    15、 事务处理与锁事务处理与锁模拟死锁的产生模拟死锁的产生 两个事务需要修改dept表的10号部门和20号部门的地址,这两行记录相当于上图中需要锁定的资源R1和R22015-816-30Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁模拟死锁的产生模拟死锁的产生SQL-conn1SQL update dept set loc=BOSTON where deptno=10;SQL-conn2SQL update dept set loc=CHICAGO where deptno=20;SQL-conn1SQL update dept set loc=NEW YORK

    16、where deptno=20;SQL-conn2SQL update dept set loc=DALLAS where deptno=10;SQL-conn1SQL update dept set loc=NEW YORK where deptno=20;update dept set loc=NEW YORK where deptno=20 *第 1 行出现错误:ORA-00060:等待资源时检测到死锁注意:Oracle的查询操作不使用锁,修改数据时附加行锁,与其他数据库产品相比,一般较少发生死锁。2015-816-31Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁

    17、事务处理与锁锁的升级和转换锁的升级和转换 Oracle的查询操作不使用锁,修改数据时附加行锁,与其他数据库产品相比,一般较少发生死锁。2015-816-32Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁多版本数据技术多版本数据技术 执行数据修改时,旧版本数据会存入undo表空间。用于保证读写一致性和回滚操作。解决了以下两个问题 实现了读一致性,解决了脏读问题 读取操作不需要加锁,使得读写操作不会相互等待 两种隔离级别下,多版本数据的应用稍有不同 若连接为read committed级别,则此连接中的查询操作总是读到与其时间距离最近的事务提交的结果,称为语句级别

    18、读一致性。若连接为serializable级别,则此连接中执行的查询都只能读取到此查询所在事务开始之前的数据,称为事务级别读一致性。2015-816-33Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁Oracle解决三个并发控制问题的方法解决三个并发控制问题的方法 丢失更新通过锁解决 把两个并发修改操作串行化,第二次执行修改操作时,是在第一次修改操作完成后的结果上进行的。脏读通过多版本数据解决 如果一个连接读取的数据正在被其他事务修改,则此连接读取其旧版本数据。不可重复读通过多版本数据解决。把连接的事务隔离级别设置为serializable,本连接的查询只能读

    19、取到事务开始之前的数据。2015-816-34Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁实例恢复实例恢复 事务提交之前,其修改的部分数据可能已经写入磁盘,而提交之后,可能会有被修改的数据尚未写入磁盘,这样的数据库显然处于不一致的状态。如果数据库运行时,服务器发生了故障,导致意外关闭,则在数据库重启时,需要进行实例恢复。实例恢复包括前滚和回滚两个过程,整个过程由Oracle自动完成。2015-816-35Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁checkpoint与实例恢复的关系与实例恢复的关系 checkpoint进

    20、程启动时,会把数据缓冲区中的脏块(即修改过的数据块)写入磁盘的数据文件,并在重做日志文件中记录下当前的SCN号。最后一次checkpoint是实例恢复的起始点,因为之前的脏块已经都被写入磁盘了。2015-816-36Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁前滚前滚(rollforward)实例恢复开始时,Oracle读取联机重做文件中最后一次checkpoint之后的所有重做数据,应用到数据文件。前滚完成后,数据库可以接受客户端的连接请求。前滚完成后,对于最后一次checkpoint之后提交的事务来说,其修改的数据全部写入了磁盘,保证了这些数据的一致性。checkpoint之后未结束事务中修改的数据及其旧版本数据由于前滚操作,也被分别写入了数据文件及undo文件,这些数据不符合一致性要求。2015-816-37Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁回滚回滚(rollback)前滚操作会把未结束事务修改的数据写入磁盘,回滚操作是把这些操作撤销,即用undo表空间中的旧版本数据替换掉数据文件中被修改的这部分数据。2015-816-38Oracle数据库系统原理数据库系统原理-第第16章章 事务处理与锁事务处理与锁

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《数据库技术》课件第16章 事务处理与锁3.0.pptx
    链接地址:https://www.163wenku.com/p-5900397.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库