2011-09-18 107 views
0

我有下面的隔离等级串行化事务的序列在oracle中可序列化事务的行为?

trnsaction1        transaction2 

              get row2 // value1 

update row1 
update row2//update to 2 
commit 

              get row1 
              get row2 // lin6 

意愿交易2看到行1和行2,当然该transaction2不会被事务1看到ROW2(更新的更新值的更新值)在行6,但不知道它会看到由transaction1更新的row1的更新值?

回答

0

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

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

编辑:

史蒂夫,我认为这是不正确的。从documentation

[阅读COMMITED交易]

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

因为Oracle不阻止其他事务 修改查询读取的数据,所以该数据可以通过查询的两次执行之间的其他事务更改。因此,运行给定查询两次的 事务可以同时经历 不可重复读取和幻像。

[Serializable接口]

序列化事务只能看到那些犯下 在交易开始的时间的变化,再加上通过INSERT,UPDATE由 交易本身做出这些变化和DELETE语句。 可序列化事务不会经历不可重复读取或 幻影。

+0

hi eaolson,transaction2中的第6行将不会看到transaction1提交的值。因为可序列化事务处理不允许不可重复读取。这是肯定的。但我担心得到行1上面第6行 –

+1

它将返回在事务2开始时的row1的值 – steve

+0

感谢steve.So基本上可序列化的事务将具有种类的事务启动时的架构的快照,并将返回该行快照偶数据由其他事务承担。对? –