删除行并删除 table lock oracle

Delete row and delete table lock oracle

我有两个查询

1.delete from x;

2.delete from x where y='a'

oracle 11 g 为上述查询提供什么类型的锁?

假设我们在程序中迭代以下查询

delete from x where y='$a'

让我们列出数字 1,2,3,4.. 现在,如果从 2 个服务器调用相同的程序,1 个服务器将删除 1,3...,而其他服务器将删除 2,4...?

没问题。您可以删除不存在的记录。但是你不能忘记提交事务。

1) 由于没有 where 子句,所有行都将锁定在该用户会话的 table 中。 2)只有那些匹配where子句的行才会被锁定。 Oracle 通过在数据块中为该行设置一个锁定位来使用行级锁定。

除非并且直到发出提交 - 没有其他会话会看到这些删除。 Oracle 将使用回滚信息——为每个单独的删除(或任何 DML 操作)语句创建,以向任何其他会话提供读取一致的视图。含义:其他会话将看到 table 而没有 删除。一旦行被锁定 - 将阻止其他会话对这些行发出删除操作,并且用户将被阻止,等待这些行被提交或回滚。您可以使用两个 sqlplus 会话对此进行测试。

如果您想了解更多关于锁的知识,请阅读 Tom Kyte 的优秀著作《专家 Oracle DB 架构》。

是的,两个不同的会话可以删除不同的行集。默认情况下,Oracle 不会执行完全 table 锁定(它会在 DML 期间锁定 table 以防止在更改挂起时对该 table 进行结构更改),因此一个会话不会阻止另一个会话。