Oracle数据库系统并发与一致_第1页
Oracle数据库系统并发与一致_第2页
Oracle数据库系统并发与一致_第3页
Oracle数据库系统并发与一致_第4页
Oracle数据库系统并发与一致_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十四章:Oracle并发与一致学习目标14.1并发性与一致性14.2隔离机制14.3锁机制14.1并发性与一致性T1T2TnOracle客户机与服务器结构1、并发性与一致性的需求在单用户的数据库中,用户可以修改数据,而不用担心其它用户在同一时间修改相同的数据。但是,在一个多用户的数据库中,多个事务内的语句可以同时更新相同的数据。同时执行的多个事务必须产生有意义且一致的结果。因此,多用户数据库必须提供以下功能:数据并发性:确保多个用户可以同时访问数据数据一致性:确保每个用户看到数据的一致的视图,包括可以看到用户自己的事务所做的更改,和其它用户已提交的事务所做的更改。2、并发性带来不一致性并发会产生多个事务同时存取同一数据的情况。可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性归纳起来共有三个主要问题:脏读:在事务中,读到了其它事务没有提交的记录不可重复读:在事务中,即使查询条件相同,下次返回的记录与上次返回记录不一样,不一样体现在记录被修改或记录被删除幻影读:在事务中,即使查询条件相同,下次返回的记录与上次返回记录不一样,不一样体现在新增加了记录。(1)事务并发执行带来的问题(脏读)事务A

事务B

读取X=100

写入X=X+100

读取X=200

事务回退X=100(2)事务并发执行带来的问题(不可重复读)(3)事务并发执行带来的问题幻影读3、并发问题的解决办法要想解决脏读、不可重复读、幻读等不一致现象,那么就需要提高事务的隔离级别。为了描述事务并发运行时的一致性行为,研究人员定义了一种事务隔离模型,称之为serializability(序列化)。这种可串行化事务操作使得它看起来似乎没有其它用户在操作数据。虽然这种序列化机制在一般情况下是可用的,但在并发要求高的场景,它会严重影响系统的吞吐能力。即事务的隔离级别越高,并发能力也就越低。所以,一般情况下,需要在事务隔离级别与性能间作一个取舍。14.2隔离机制

为了兼顾并发效率和异常控制,在标准SQL规范中,定义了四个事务隔离级别。下表是各隔离级别对各种异常的控制能力。Oracle数据库提供了readcommitted(默认级别)和serializable两种隔离级别,同时还支持只读模式。1、ReadCommitted事务隔离级别

(oracle默认隔离级别)在此级别中,事务中查询到的数据都是在此查询前已经提交的。这种隔离级别避免了读取脏数据。然而数据库并不阻止其它事务修改一个所读取的数据,其它事务可能会在查询执行期间修改。因此,一个事务运行同样的查询两次,可能会遇到不可重复读和幻影读。2、Serializable事务隔离级别1.简单地说,seriaizabe就是使事务看起来象是一个接着一个地顺序地执行。2.仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改。3.保证不会出现非重复读和幻像。4.Seriaizabe隔离级别提供了read-ony事务所提供的读一致性(事务级的读一致性),同时又允许DM操作。3、Read-Only事务隔离级别只读隔离级别和序列化隔离级别很像,只是在只读事务中,不允许有修改操作,除非是用sys用户。14.3锁机制事务之间的并发控制实际是通过锁实现的,锁是用来预防事务之间访问相同数据时的破坏性交互(比如错误的更新数据等)的一种机制,在维护数据库并发性与一致性方面扮演了一个重要角色。官网网址参考:/cd/E11882_01/server.112/e40540/consist.htm#CNCPT020/cd/B19306_01/server.102/b14220/consist.htm1、自动锁

Oracle数据库在执行SQL的时候会自动获取所需要的锁,因此用户在应用设计的时候只需要定义恰当的事务级别,不需要显示锁定任何资源。(即使Oracle提供了手动锁定数据的方法,用户不会用到。)2、oracle锁模式Oracle自动使用最低的限制级别去提供最高程度的并发。Oracle中有两种类型的锁:1、排他锁(X):这种类型是阻止资源共享的,一个事务获取了一个排他锁,则这个事务锁定期间只有这个事务可以修改这个资源2、共享锁(S):这种类型是允许资源共享的,多个事务可以在同一资源上获取共享锁假设一个事务使用select...forupdate(其它DML操作也一样)来选择表中的一行,则这个事务会获取该行的排他行锁,以及所在表的共享表锁。行锁允许其它事务修改除该行的其它行,而表锁阻止其它事务修改表结构。3、Oracle封锁粒度DML锁可以防止多个互相冲突的DDL,DML操作对数据的破坏性。DML语句自动获取两种类型的锁:Rowlocks(TX)和Tablelocks(TM)。XSRXRSSRXX4、意向锁表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加S锁,如果表中的一行已被另外的事务加了X锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了“意向锁”的概念。意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。

锁有两种基本的锁类型(S锁、X锁),可以自然地派生出两种意向锁。意向共享锁(IntentShareLock,简称IS锁):如果要对一个数据库对象加S锁,首先要对其上级结点加IS锁,表示它的后裔结点拟(意向)加S锁;意向排它锁(IntentExclusiveLock,简称IX锁):如果要对一个数据库对象加X锁,首先要对其上级结点加IX锁,表示它的后裔结点拟(意向)加X锁。另外,基本的锁类型(S、X)与意向锁类型(IS、IX)之间还可以组合出新的锁类型,理论上可以组合出4种,即:S+IS,S+IX,X+IS,X+IX,但稍加分析不难看出,实际上只有S+IX有新的意义,其它三种组合都没有使锁的强度得到提高(即:S+IS=S,X+IS=X,X+IX=X,这里的“=”指锁的强度相同)。所谓锁的强度是指对其它锁的排斥程度。这样我们又可以引入一种新的锁的类型共享意向排它锁(SharedIntentExclusiveLock,简称SIX锁):如果对一个数据库对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例如:事务对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别行(所以要对该表加IX锁)。这样数据库对象上所加的锁类型就可能有5种:即S、X、IS、IX、SIX。4、Oracle的锁模式ShareTablelock(S,共享表锁):一个事务持有了S锁,允许其它事务查询这个表(除了select...forudpate),但更新操作只允许单个事务持有该锁时才可以。因为多个事务可能会并发持有这个锁,所以持有了这个锁并不代表这个事务就可以修改表。ExclusiveTablelock(X,排他表锁)Rowsharelock(RS,行共享表锁):也叫subsharetablelock(SS),表明事务在这个表上锁住了一行,并且打算更新它们,RS锁是最小约束的锁,当然也是并发最高的锁RowExclusiveTablelock(RX,行排他表锁):也叫subexclusivetablelock(SX),表明表中有事务更新了行,或者执行select...forupdate。一个SX锁允许其它事务同时查询、插入、更新、删除或者锁行。因此多个事务可以同时获取在同一个表上获取SS和SX锁。ShareRowExclusiveTablelock(SRX,共享行排他表锁):也叫share-subexclusivetablelock(SSX),比S锁的限制更多,一次只能有一个事务获取SSX锁,允许其它事务查询(除了select...forupdat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论