nvloracle的并发控制与多版本

nvloracle的并发控制与多版本

ID:30362246

大小:84.69 KB

页数:12页

时间:2018-12-29

nvloracle的并发控制与多版本_第1页
nvloracle的并发控制与多版本_第2页
nvloracle的并发控制与多版本_第3页
nvloracle的并发控制与多版本_第4页
nvloracle的并发控制与多版本_第5页
资源描述:

《nvloracle的并发控制与多版本》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、nvlOracle的并发控制与多版本oraclenvl:Oracle的并发控制与多版本开发多用户数据库应用,最大的难题之一是:一方面要力争最大的并发访问,而同时还要确保每一用户能以一致的方式读取和修改数据。力争最大的并发访问需要用锁定机制,而确保一致读和修改数据则需要一些并发控制机制。1.并发控制并发控制(concurrencycontrol)是数据库提供的函数集合,允许多个人同时访问和修改数据。锁(lock)是Oracle管理共享数据库资源并发访问并防止并发数据库事务之间"相互干涉"的核心机制之一。总结一下,Oracle使用了多种锁,包括:TX锁:修改数据的事务在执行期间会获得

2、这种锁。TM锁和DDL锁:在你修改一个对象的内容(对于TM锁)或对象本身(对应DDL锁)时,这些锁可以确保对象的结构不被修改。闩(latch):这是Oracle的内部锁,用来协调对其共享数据结构的访问。Oracle对并发的支持不仅使用高效的锁定,还实现了一种多版本体系结构,它提供了一种受控但高度并发的数据访问。这里的多版本指的是可以同时地物化多个版本的数据,这也是Oracle提供读一致性视图的机制。多版本有一个很好的副作用,即数据的读取器(reader)绝对不会被数据的写入器(writer)所阻塞。换句话说,写不会阻塞读。这是Oracle与其他数据库之间的一个根本区别。默认情况下

3、,Oracle的读一致性多版本视图是应用与语句级的,即对应与每一个查询。也可以改为事务级的。数据库中事务的基本作用是将数据库从一种一致状态转变为另一种一种状态。ISOSQL标准指定了多种事务隔离级别(transactionisolationlevel),这些隔离级别定义了一个事务对其他事务做出的修改有多"敏感"。越是敏感,数据库在应用执行的各个事务之间必须提供的隔离程度就越高。2.事务隔离级别ANSI/ISOSQL标准定义了4种事务隔离级别,对于相同的事务,采用不同的隔离级别分别有不同的结果。也就是说,即使输入相同,而且采用同样的方式来完成同样的工作,也可能得到完全不同的答案,这

4、取决于事务的隔离级别。这些隔离级别是根据3个"现象"定义的,以下就是给定隔离级别可能允许或不允许的3种现象:a)脏读(dirtyread):你能读取未提交的数据,也就是脏数据。只要打开别人正在读写的一个OS文件(不论文件中有什么数据),就可以达到脏读的效果。如果允许脏读,将影响数据完整性,另外外键约束会遭到破坏,而且会忽略惟一性约束。b)不可重复读(nonrepeatableread):这意味着,如果你在T1时间读取某一行,在T2时间重新读取这一行时,这一行可能已经有所修改。也许它已经消失,有可能被更新了,等等。这里的修改是已经提交了的,与脏读不同。c)幻像读(phantomre

5、ad):这说明,如果你在T1时间执行一个查询,而在T2时间再执行这个查询,此时可能已经向数据库中增加了另外的行,这会影响你的结果。与不可重复读的区别在于:在幻像读中,已经读取的数据不会改变,只是与以前相比,会有更多的数据满足你的查询条件。SQL隔离级别是根据这些现象来描述级别的,并没有强制采用某种特定的锁定机制或硬性规定的特定行为,这就允许多种不同的锁定/并发机制存在。表1ANSI隔离级别隔离级别脏读不可重复读幻像读READUNCOMMITTED允许允许允许READCOMMITTED允许允许REPEATABLEREAD允许SERIALIZABLESQL的隔离级别表明ReadCom

6、mitted不能提供一致性的结果,因为有可能产生不可重复读和幻想读,而在Oracle中,ReadCommitted则有得到读一致查询所需的属性。另外,Oracle还秉承了READUNCOMMITTED的"精神"。(有些数据库)提供脏读的目的是为了支持非阻塞读,也就是说,查询不会被同一个数据的更新所阻塞,也不会因为查询而阻塞同一数据的更新。不过,Oracle不需要脏读来达到这个目的,而且也不支持脏读。但在其他数据库中必须实现脏读来提供非阻塞读。除了SQL定义的4个隔离级别外,Oracle还定义了另外一个级别,叫做ReadOnly。READONLY事务相对于无法在SQL中完成任何修改

7、的REPEATABLEREAD或SERIALIZABLE事务。如果事务使用READONLY隔离级别,只能看到事务开始那一刻提交的修改,但是插入、更新和删除不允许采用这种模式(其他会话可以更新数据,但是READONLY事务不行)。如果使用这种模式,可以得到REPEATABLEREAD和SERIALIZABLE级别的隔离性。以下分别介绍一下这几个隔离级别。2.1READUNCOMMITTED这个隔离级别允许脏读,但Oracle不利用脏读,甚至不允许脏读。其实ReadUncommitt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。