oracle事务隔离级别_笔记5:READ ONLY
READ ONLY
READ ONLY事务与SERIALIZABLE事务很相似,唯一的区别是READ ONLY事务不允许修改,因此不会遇到ORA-08177错误。READ ONLY事务的目的是支持报告需求,即相对于某个时间点,报告的内容应该是一致的。在其他系统中,为此要使用REPEATABLE READ,这就要承受共享读锁的相关影响。在Oracle中,则可以使用READ ONLY事务。采用这种模式,如果一个报告使用50条SELECT语句来收集数据,所生成的结果相对于某个时间点将是一致的,即事务开始的那个时间点。你可以做到这一点,而无需在任何地方锁定数据。
为达到这个目标,就像对单条语句一样,也使用了同样的多版本控制机制。会根据需要从undo段重新创建数据,并提供报告开始时数据的原样。不过,READ ONLY事务也不是没有问题,在SERIALIZABLE事务中你可能会遇到ORA-08177错误,而在READ ONLY事务中可能会看到ORA-1555:snapshot too old错误。如果系统上有人正在修改你读取的数据,就会发生这种情况。对这个信息所做的修改(undo信息)将记录在undo段中。但是undo段以一种循环方式使用,这与重做日志非常相似。报告运行的时间越长,重建数据所需的undo信息就越有可能已经不在那里了。undo段会回绕,你需要的那部分undo段可能已经被另外某个事务占用了。此时,就会得到ORA-1555错误,只能从头再来。
对于这个棘手的问题,唯一的解决方案就是为系统适当地确定undo段的大小。
有些小累,看会书就乏了... 看得少些...
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5222.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
