Oracle:哪个Lock是通过Serialized隔离级别获取的

问题描述 投票:0回答:2

我想要确定的是隔离级别和锁之间是否存在任何直接关系。那么,假设我启动了一个具有可序列化隔离级别的事务,那么 Oracle 默认情况下会在该事务中列出的所有表上获取某种类型的“表”锁,如果是这样,那么它是什么?

我找不到这个问题的任何直接答案,但通过阅读许多在线文档,我自己的理解是,隔离级别和锁之间没有直接关系。将根据事务中存在的特定 SQL 语句获取锁,而不是根据事务隔离级别是读已提交还是可序列化,因此如果存在 DML,则将获取读独占表锁 (RX),如果存在像

LOCK TABLE table IN EXCLUSIVE MODE;
这样的语句将获取独占表锁 (X)。

请注意,这个问题非常特定于 Oracle,并且非常特定于可串行化隔离级别获取哪个锁。我绝不是在寻找与 Oracle 中可用的隔离级别和锁相关的答案,我已阅读在线文档并理解它们。

oracle locking isolation-level locks database-locking
2个回答
1
投票

我也在 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-serialized-isolation-level


0
投票

这是两篇关于数据库隔离级别及其工作原理的非常棒的文章,它们肯定可以为您提供所需的知识: 第 1 条第2条

© www.soinside.com 2019 - 2024. All rights reserved.