oracle中的可序列化隔离级别

oracle中的可序列化隔离级别,oracle,transaction-isolation,Oracle,Transaction Isolation,根据articale,可序列化隔离级别对行执行读取锁定和范围锁定。因此,如果在一个事务中,我对某些行(或行)执行SELECT语句,则尝试查询相同行(或该行的子集)的另一个事务将锁定,直到第一个事务进行提交或回滚。对吗?但在oracle中,我尝试执行这样的场景,第二个事务并没有被锁定。为什么在第一个事务中执行提交之前它不会锁定?Oracle不接受读取锁定。它们具有CR机制。Oracle采用该机制来保证读取一致性,而不会阻止写入: 读取一致性查询 查询返回的数据是提交的,并且与方面一致 到一个时间点

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

Oracle不接受读取锁定。它们具有CR机制。

Oracle采用该机制来保证读取一致性,而不会阻止写入:

读取一致性查询

查询返回的数据是提交的,并且与方面一致 到一个时间点

非阻塞查询

数据的读写器不会相互阻塞

当您执行SELECT in Read COMMITED隔离时,数据库将按查询开始时的方式重新构造行,以便您具有一致的数据视图(在同一时间点检索所有块)。Oracle使用“撤消数据”来撤消查询开始后对块所做的更改(以及来自其他未限制事务的更改)

其原理与可序列化事务隔离相同,不同之处在于Oracle按照事务开始时的方式重建行

为了进一步阅读,我建议你看看汤姆·凯特的一本书中的“”一章