第十三章数据一致性和并发性.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十三章数据一致性和并发性

第十三章 数据一致性和并发性 这一章描述了Oracle如何维护多用户数据库环境中的数据一致性问题。 本章包含下列主题: ??多用户环境中的数据并发性和一致性介绍 ??Oracle如何管理数据并发性和一致性 ??Oracle如何锁定数据 ??Oracle闪回查询概述 多用户环境中数据并发性和一致性介绍 在单用户数据库中,用户修改数据库中的数据,不用担心其他用户同时修改相同的数据。但是,在多用户数据库中,同时执行的多个事务中的语句可以修改同一数据。同时执行的事务需要产生有意义的和一致性的结果。因而,在多用户数据库中,数据并发性和数据一致性的控制非常重要: ??数据并发性:指很多用户可以同时访问数据 ??数据一致性:指每个用户可以看到数据的一致性结果,包括自身事务和其他事务产生的改变。 为给同时运行的事务描述一致性事务行为,Oracle研究员定义了一个事务隔离级别:串行性(serializability)。事务行为的的可串行模式试图确保事务运行的方式看起来像是一次运行一个事务(或者串行性),而不是并发运行。 虽然事务间的这种隔离级别经常使用,但这种模式下的很多应用程序会降低吞吐量。并发运行事务的完全隔离意味着一个事务不能对另外一个事务正在查询的表执行插入。简而言之,真实环境中经常要在优秀的事务隔离级别和性能之间做一个折衷。 Oracle提供了两个隔离级别,为应用程序开发人员提供可选的模式来兼顾性能和一致性。 可预防现象和事务隔离级别 ANSI/IOS SQL标准(SQL 92)定义了4个事务隔离级别,对事务处理性能的影响也个不相同。这些隔离级别是考虑了事务并发执行必须避免的3个现象提出的。 3个应该避免的现象为: ??脏读:一个事务可以读取其他事务写入但还没有提交的数据。 ??不可重复读(模糊读):一个事务重复读到以前读到的和查询到的数据,这些数据是其他的已提交事务已经修改或者删除的数据。 ??幻影读:一个事务重复运行查询返回的一些列行,这些行包括其他已经提交的事务已经插入的额外的行。 SQL92根据这些对象定义了4个隔离级别,事务运行在特定的隔离级别允许特别的一些表现。如表13-1所示。 表13-1 隔离级别阻止的读现象 隔离级别 脏读 不可重复读 幻影读 非提交读(read uncommitted) 允许 允许 允许 提交读(read committed) 不允许 允许 允许 重复读(Repeatable read) 不允许 不允许 允许 串行性(serializable) 不允许 不允许 不允许 Oracle提供提交读(read commited)和串行性(serializable)隔离级别,而只读模式不是SQL92的一部分。提交读是默认的。 锁机制概述 通常来说,多用户数据库使用多种类型的数据锁来解决相关数据并发、一致性和完整性的问题。锁是防止访问同一资源的事务的破坏性干扰的一种机制。 资源包括两种通用的类型: ??用户对象,例如表、行(结构和数据) ??用户不可见的系统对象,比如内存中的共享数据结构和数据字典行 Oracle如何管理数据并发性和一致性 Oracle在一个多用户环境中维护数据一致性,是通过使用多版本一致性模型和不同类型的锁和事务来做到的。这一部分包含下列主题: ??多版本并发控制 ??语句级别读一致性 ??事务级别读一致性 ??真正应用集群的读一致性 ??Oracle隔离级别 ??提交读和串行性隔离级别的比较 ??隔离级别的选项 多版本并发控制 Oracle自动为一个查询提供读一致性,就是说查询结果来源于一个单个的时间点(语句级别读一致性)。Oracle还为事务中所有的查询提供读一致性(事务级别读一致性)。 Oracle使用回滚段中维护的信息来提供这些一致性视图。回滚段包含未提交的事务或最近提交的事务修改的数据的原始值。图13-1显示了Oracle如何通过回滚段中的数据提供语句级别的读一致性。 图13-1 读一致性和事务 当一个查询进入执行阶段,就确定了当前系统修改号(SCN)。在图13-1中,系统修改号为10023。在查询读取数据块时,只有对写入SCN号可见的块才会使用。块中的修改数据(更近的SCN)从回滚段中重新构建数据,这些重构数据返回给查询。因而,每个查询返回查询开始的时间的SCN涉及的所有提交数据。在查询执行时其他事务造成的修改不被采用,确保每个查询返回的都是一致性数据。 语句级别读一致性 Oracle总是执行语句级别读一致性。这可以确保单个查询返回的所有数据来源于单个时间点(查询开始的时间点)。因而,一个查询看不到脏数据或者查询执行期间其他事务提交的任何改变。查询执行开始后,只有查询开始之前提交的数据可以被查询到。查询不能看到语句开始执行之后提交的任何数据。 Oracle自动为每个查询提

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档