oracle中的可序列化隔离级别

时间:2012-03-19 00:15:13

标签: oracle transaction-isolation

根据this,可序列化隔离级别对行执行读锁定和范围锁定。因此,如果在一个事务中我对某些行(或行)执行SELECT语句,那么将尝试查询相同行(或该行的子集)的另一个事务将锁定,直到第一个进行提交或回滚。对?但是在oracle中我试图执行这样的场景并且第二次交易没有被锁定。为什么在我在第一次交易中执行提交之前它没有锁定?

2 个答案:

答案 0 :(得分:2)

Oracle使用multiversionning来保证读取权限而不会阻止写入:

  

阅读一致性查询

     

查询返回的数据已提交并与之保持一致   到一个时间点。

     

非阻止查询

     

数据的读者和编写者不会相互阻止

当您在Read-Committed隔离中执行SELECT时,数据库会按照查询开头处的行重建这些行,以便您拥有一致的数据视图(所有块都在同一点检索到 - 时间)。 Oracle使用撤消数据来反转在查询开始后对块所做的更改(也包括其他未提交事务的更改)。

原则与可序列化事务隔离相同,只是Oracle在事务开始时重建行。

为了进一步阅读,我建议你看一下Tom Kyte的书中的“Multi-Versioning and Concurrency”章节。

答案 1 :(得分:0)

Oracle不接受读锁定。他们有CR机制。