Oracle数据库系统并发与一致

上传人:高校教****PT 文档编号:370190629 上传时间:2023-11-28 格式:PPTX 页数:22 大小:2.09MB
返回 下载 相关 举报
Oracle数据库系统并发与一致_第1页
第1页 / 共22页
Oracle数据库系统并发与一致_第2页
第2页 / 共22页
Oracle数据库系统并发与一致_第3页
第3页 / 共22页
Oracle数据库系统并发与一致_第4页
第4页 / 共22页
Oracle数据库系统并发与一致_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《Oracle数据库系统并发与一致》由会员分享,可在线阅读,更多相关《Oracle数据库系统并发与一致(22页珍藏版)》请在金锄头文库上搜索。

1、第十四章:Oracle并发与一致学习目标14.1 并发性与一致性14.2 隔离机制14.3 锁机制14.1 并发性与一致性T1T2TnOracle客户机与服务器结构1、并发性与一致性的需求 在单用户的数据库中,用户可以修改数据,而不用担心其它用户在同一时间修改相同的数据。但是,在一个多用户的数据库中,多个事务内的语句可以同时更新相同的数据。同时执行的多个事务必须产生有意义且一致的结果。因此,多用户数据库必须提供以下功能:p数据并发性:确保多个用户可以同时访问数据 p数据一致性:确保每个用户看到数据的一致的视图,包括可以看到用户自己的事务所做的更改,和其它用户已提交的事务所做的更改。2、并发性带

2、来不一致性并发会产生多个事务同时存取同一数据的情况。可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性归纳起来共有三个主要问题:脏读:在事务中,读到了其它事务没有提交的记录不可重复读:在事务中,即使查询条件相同,下次返回的记录与上次返回记录不一样,不一样体现在记录被修改或记录被删除幻影读:在事务中,即使查询条件相同,下次返回的记录与上次返回记录不一样,不一样体现在新增加了记录。(1)事务并发执行带来的问题(脏读)事务A事务B读取X100写入XX+100读取X200事务回退X=100(2)事务并发执行带来的问题(不可重复读)(3)事务并发执行带来的问题幻影读3、并发问题的解决办法要想解

3、决脏读、不可重复读、幻读等不一致现象,那么就需要提高事务的隔离级别。为了描述事务并发运行时的一致性行为,研究人员定义了一种事务隔离模型,称之为serializability(序列化)。这种可串行化事务操作使得它看起来似乎没有其它用户在操作数据。虽然这种序列化机制在一般情况下是可用的,但在并发要求高的场景,它会严重影响系统的吞吐能力。即事务的隔离级别越高,并发能力也就越低。所以,一般情况下,需要在事务隔离级别与性能间作一个取舍。14.2 隔离机制 为了兼顾并发效率和异常控制,在标准SQL规范中,定义了四个事务隔离级别。下表是各隔离级别对各种异常的控制能力。Oracle数据库提供了read com

4、mitted(默认级别)和serializable两种隔离级别,同时还支持只读模式。1、Read Committed事务隔离级别(oracle默认隔离级别)在此级别中,事务中查询到的数据都是在此查询前已经提交的。这种隔离级别避免了读取脏数据。然而数据库并不阻止其它事务修改一个所读取的数据,其它事务可能会在查询执行期间修改。因此,一个事务运行同样的查询两次,可能会遇到不可重复读和幻影读。2、Serializable事务隔离级别1.简单地说,seriaizabe就是使事务看起来象是一个接着一个地顺序地执行。2.仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改。3.保证不会出现非重

5、复读和幻像。4.Seriaizabe隔离级别提供了read-ony事务所提供的读一致性(事务级的读一致性),同时又允许DM操作。3、Read-Only事务隔离级别 只读隔离级别和序列化隔离级别很像,只是在只读事务中,不允许有修改操作,除非是用sys用户。14.3 锁机制事务之间的并发控制实际是通过锁实现的,锁是用来预防事务之间访问相同数据时的破坏性交互(比如错误的更新数据等)的一种机制,在维护数据库并发性与一致性方面扮演了一个重要角色。官网网址参考:https:/ Oracle数据库在执行SQL的时候会自动获取所需要的锁,因此用户在应用设计的时候只需要定义恰当的事务级别,不需要显示锁定任何资源

6、。(即使Oracle提供了手动锁定数据的方法,用户不会用到。)2、oracle锁模式Oracle自动使用最低的限制级别去提供最高程度的并发。Oracle中有两种类型的锁:1、排他锁(X):这种类型是阻止资源共享的,一个事务获取了一个排他锁,则这个事务锁定期间只有这个事务可以修改这个资源2、共享锁(S):这种类型是允许资源共享的,多个事务可以在同一资源上获取共享锁 假设一个事务使用select.for update(其它DML操作也一样)来选择表中的一行,则这个事务会获取该行的排他行锁,以及所在表的共享表锁。行锁允许其它事务修改除该行的其它行,而表锁阻止其它事务修改表结构。3、Oracle封锁粒

7、度DML锁可以防止多个互相冲突的DDL,DML操作对数据的破坏性。DML语句自动获取两种类型的锁:Row locks(TX)和Table locks(TM)。X XS SRXRXRSRSSRXSRXX X4、意向锁表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加 S 锁,如果表中的一行已被另外的事务加了 X 锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就

8、引出了“意向锁”的概念。意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中每行记录的锁标志位了,系统效率得以大大提高。锁有两种基本的锁类型(S锁、X 锁),可以自然地派生出两种意向锁。意向共享锁(Intent Share Lock,简称 IS 锁):如果要对一个数据库对象加S锁,首先要对其上级结点加IS 锁,表示它的后裔结点拟(意向)加 S锁;意向排它锁(Intent Exclusive Lock,简称 IX

9、锁):如果要对一个数据库对象加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,这里的“=”指锁的强度相同)。所谓锁的强度是指对其它锁的排斥程度。这样我们又可以引入一种新的锁的类型共享意向排它锁(SharedIntent Exclusive Lock,简称 SIX 锁):如果对一个数据库对

10、象加 SIX 锁,表示对它加 S 锁,再加IX 锁,即 SIX=S+IX。例如:事务对某个表加 SIX 锁,则表示该事务要读整个表(所以要对该表加S 锁),同时会更新个别行(所以要对该表加 IX锁)。这样数据库对象上所加的锁类型就可能有5 种:即S、X、IS、IX、SIX。4、Oracle的锁模式1.Share Table lock(S,共享表锁):一个事务持有了S锁,允许其它事务查询这个表(除了select.for udpate),但更新操作只允许单个事务持有该锁时才可以。因为多个事务可能会并发持有这个锁,所以持有了这个锁并不代表这个事务就可以修改表。2.Exclusive Table lo

11、ck(X,排他表锁)3.Row share lock(RS,行共享表锁):也叫subshare table lock(SS),表明事务在这个表上锁住了一行,并且打算更新它们,RS锁是最小约束的锁,当然也是并发最高的锁4.Row Exclusive Table lock(RX,行排他表锁):也叫subexclusive table lock(SX),表明表中有事务更新了行,或者执行select.for update。一个SX锁允许其它事务同时查询、插入、更新、删除或者锁行。因此多个事务可以同时获取在同一个表上获取SS和SX锁。5.Share Row Exclusive Table lock(SRX,共享行排他表锁):也叫share-subexclusive table lock(SSX),比S锁的限制更多,一次只能有一个事务获取SSX锁,允许其它事务查询(除了select.for update),不允许其它事务更新。5、TM锁的相容矩阵事务A事务BSXRSRXSRXSYESNOYESNONOYESXNONONONONOYESRSYESNOYESYESYESYESRXNONOYESYESYESYESSRXNONOYESNONOYESYESYESYESYESYESYES

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号