繁体   English   中英

oracle中可序列化事务的行为?

[英]Behaviour of serializable transactions in oracle?

我有以下隔离级别为可序列化的事务序列

 trnsaction1                               transaction2

                                           get row2   // value1

 update row1
 update row2//update to 2
 commit

                                           get row1
                                           get row2 //  lin6

事务2会看到行1和行2的更新值吗?确定事务2在行6不会看到行2的更新值(由事务1更新),但是不确定它会看到事务1的更新行1的更新值吗?

事务1提交工作后,事务2将在最后两行中看到更新的更改。 也就是说,除非您将SET TRANSACTION READ ONLYSET TRANSACTION READ ONLY设为SET TRANSACTION READ ONLY作为事务中的第一个操作。

在读写事务中,单个语句是读取一致的,但不在多个语句之间。

编辑:

史蒂夫,我认为那是不对的。 文档中

[读取已提交的交易]

这是默认的事务隔离级别。 由事务执行的每个查询仅看到在查询(不是事务)开始之前提交的数据。 Oracle查询永远不会读取脏(未提交)的数据。

因为Oracle不会阻止其他事务修改查询读取的数据,所以可以在两次查询执行之间通过其他事务更改该数据。 因此,运行给定查询两次的事务可能会遇到不可重复的读取和幻象。

[可序列化]

可序列化的事务仅查看那些在事务开始时提交的更改,以及事务本身通过INSERT,UPDATE和DELETE语句所做的更改。 可序列化的事务不会经历不可重复的读取或幻象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM