我试图建立的是隔离级别和锁之间是否存在任何直接关系。因此,假设我使用可序列化隔离级别启动了一个事务,那么Oracle是否会默认获取该事务中列出的所有表上的某种类型的“表”锁,如果是,那么它是什么?
对于这个问题,我找不到任何直接的答案,但我自己通过阅读许多在线文档了解到,隔离级别和锁之间没有直接的关系,锁将基于事务中存在的特定SQL语句获得-而不是基于事务隔离级别是Read Committed还是Serializable。因此,如果存在DML,则将获取读取独占表锁(RX),如果存在类似LOCK TABLE table IN EXCLUSIVE MODE;
的语句,则将获取独占表锁(X)。
请注意这个问题是针对Oracle的,而且是针对可序列化隔离级别获取的锁的。我绝不是在寻找与Oracle中可用的隔离级别和锁相关的答案,我已经阅读并理解了联机文档。
1条答案
按热度按时间nnsrf1az1#
我在Ask Tom上也问了同样的问题,Ask Tom很有风度地证实了我的理解--简而言之,隔离级别和锁之间没有直接的关系。锁将基于事务中存在的特定SQL语句获得--而不是基于事务隔离级别是“已提交读”还是“可序列化”。因此,如果存在DML,则将获取读取独占表锁(RX),如果存在类似
LOCK TABLE table IN EXCLUSIVE MODE;
的语句,则将获取独占表锁(X)。下面是AT回答的链接:https://asktom.oracle.com/pls/apex/asktom.search?tag=oracle-which-lock-is-acquired-by-serializable-isolation-level