Chinaunix首页 | 论坛 | 博客
  • 博客访问: 791458
  • 博文数量: 180
  • 博客积分: 4447
  • 博客等级: 上校
  • 技术积分: 1582
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-03 14:51
文章分类

全部博文(180)

文章存档

2014年(6)

2013年(8)

2011年(125)

2009年(35)

2008年(1)

2007年(5)

分类: Oracle

2011-01-13 13:46:14

Oracle提供的读完整性包含以下特性:

  • 保证在一个时间点上,用户通过查询语句得到的数据是一致的,且语句执行期间数据不会改变(语句级的读完整性)

  • 保证数据库中读数据的用户无需等待正在读或写相同数据的用户。

  • 保证数据库中写数据的用户无需等待正在读相同数据的用户。

  • 保证在并发事务中写数据的用户只需等待正在写相同数据行的用户。

 

为了便于理解Oracle实现读完整性的方法,可以想象每个用户都在操作一个私有的数据库副本,也就是前面提到的多版本数据完整性模型。

读完整性,撤销记录,事务

为了维护多版本数据一致性模型,当一个表的数据被更新(写)的同时也在被查询(读)时,Oracle必须创建一个维持读完整性的数据集。当更新发生时,被更新数据的原始值被记录在数据库的undo records中。在事务中的更新操作没有被提交之前,用户查询正在被修改的记录时只能看到她们的原始值。Oracle结合SGA中以及撤销记录中的信息为查询表数据的用户构建了一个 维持读完整性的视图[此视图非彼视图]。

当事务提交后,事务中对数据的修改才被永久记录。在用户事务提交后执行的语句九只能查询到提交后的数据了。

事务是Oracle实现读完整性的关键。事务是一组SQL语句(这组语句或者被一起提交,或者都不被提交),事务的作用是:

  • 决定了为查询用户生成的保持读完整性的视图的起始点

  • 控制着被一个事务修改过的数据何时可以被数据库中其它进行读写操作的事务看到

 

只读事务

默认情况下,Oracle只保证语句级的读完整性。由一个查询返回的数据对同一时间点来说是一致的。但是在有 些情况下,用户可能需要事务级的读完整性。也就是要使一个事务中的多个查询对同一时间点来说都是一致的,这样事务中的每个查询都不会受到与之冲突的事务的 干扰。如果用户需要对多个表做多个查询,建议使用只读事务。

阅读(1018) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~