oracle中有哪些不同类型的锁

时间:2013-04-10 21:01:34

标签: oracle locking

请任何人解释Oracle中的锁定模式,即共享,独占和更新锁定。我发现了很多这方面的理论,并根据那个

共享锁定:没有人可以更改数据,只读目的

独占锁定:只允许一个用户/连接更改数据。

更新锁:行被锁定,直到用户提交/回滚。

然后,我尝试使用共享来检查它是如何工作的

SQL> lock table emp in share mode;

Table(s) Locked.

SQL> update emp set sal=sal+10;

14 rows updated.

然后,我发现,用户可以在共享锁定后更改数据。然后,它与独占锁和更新锁不同。

另一个问题,更新锁和独占锁如何彼此不同,即使它们看起来几乎相同。

2 个答案:

答案 0 :(得分:9)

为将来的访问者发布解释,并提供答案。

共享锁

  • 在开始之前,先让我说有5种类型的表锁 - 行共享,行独占,共享,共享行独占和独占。共享锁是其中之一。另请注意,有行锁,与表锁不同。按照我最后提供的链接阅读所有这些。
  • 在以下语句中指定的表上获取共享锁 - LOCK TABLE table IN SHARE MODE;
  • 此锁可防止其他事务获得“行独占”(此锁由INSERT,UPDATE和DELETE语句使用),“共享行独占”和“独占”表锁,否则一切都被允许。
  • 因此,这意味着共享锁将阻止其他事务在该表上执行INSERT,UPDATE和DELETE语句,但允许其他事务使用“SELECT ... FOR UPDATE”语句更新行,因为对于此语句,“行”共享“需要锁定,并且在需要”共享“锁定时允许使用。

下表是对锁的一个很好的总结以及允许的内容。

enter image description here

<小时/> 由于很多用户都会关注这个问题所以我决定再往前走一步并提出我的学习笔记,我希望大家能从中受益:

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

<小时/> Source of this information and also excellent reading about Oracle locks

答案 1 :(得分:1)

在文档中对此进行了很好的解释:http://docs.oracle.com/cd/E11882_01/server.112/e41084/ap_locks001.htm#SQLRF55502

在您的示例中,您以共享模式锁定了表。这不会阻止其他会话在共享模式下锁定同一个对象,但它确实阻止它们以独占模式锁定它,因此您在更新时不能删除表(这需要一个独占锁)(具有共享锁) )。