我是Oracle的新手,我只想确认我对Oracle10g和10g+语句级读取一致性的理解。
Oracle10g文档指出:
Oracle总是执行语句级的读取一致性。这保证了单个查询返回的所有数据都来自一个时间点--即查询开始的时间。因此,查询永远不会看到在查询执行期间提交的脏数据或事务所做的任何更改。随着查询执行的进行,只有查询开始前提交的数据对查询是可见的。查询不会看到在语句执行开始后提交的更改。
Oracle11g文档声明:
Oracle数据库总是执行语句级的读取一致性,这保证了单个查询返回的数据相对于单个时间点是提交的和一致的。单个SQL语句一致的时间点取决于事务隔离级别和查询的性质:
请看粗体文字。如果我正确理解,Oracle将其行为更改为10g和10g+。在10g中,语句级读取一致性总是基于语句启动时的视图。在10g+中,语句级读取一致性基于依赖于隔离级别和查询本身的视图。我的理解正确吗?谢谢。
发布于 2019-08-05 08:05:44
这种行为并没有改变。至少在Oracle 7之后(可能是以前,但那是在我的时代之前),现在的Oracle 19也是如此。文档刚刚被扩展到包含默认读取提交以外的隔离级别的行为,或者在使用Flashback查询机制时。
(您应该看看最新的文档:https://docs.oracle.com/en/database/oracle/oracle-database/index.html - 11g非常古老)
重要的一点是,Oracle使用的默认隔离(语句级一致性)意味着重复相同的语句可能不会产生相同的结果,因为其他事务可能已经在语句的第一次执行期间更新了数据。Oracle使用多版本一致性来提供并发访问,这样读取器就不会阻止作者,而编写者就不会阻止读者。
https://dba.stackexchange.com/questions/244525
复制相似问题