gpt4 book ai didi

java - 删除行和删除表锁oracle

转载 作者:行者123 更新时间:2023-12-01 09:31:24 25 4
gpt4 key购买 nike

我有两个查询

1.从x中删除;

2.从 x 中删除,其中 y='a'

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

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

从 x 中删除,其中 y='$a'

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

最佳答案

1) 由于没有 where 子句,因此该用户 session 的表中的所有行都将被锁定。 2)只有那些与where子句匹配的行才会被锁定。 Oracle 通过在该行的数据 block 中设置锁定位来使用行级锁定。

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

如果您想了解有关锁的更多信息,请参阅 Tom Kyte 的优秀著作《Expert Oracle DB Architecture》。

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

关于java - 删除行和删除表锁oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39370543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com