如果多个用户想要修改 Oracle 数据库中的同一个数据块会发生什么
What happens if multiple users want to modify the same data block in Oracle Database
如果多个用户试图修改同一块中的行,Oracle 数据库如何处理这种情况?我知道他们不能修改同一行。但是它如何适用于同一块中的不同行呢?
我的意思是,Oracle 如何处理行级锁,而当您修改一行时它会修改整个块?
您应该在 dba.stackexchange.com 上提出这个问题以获得更好的答复。
行级锁发生在 DML(插入、更新、删除)或 SELECT FOR UPDATE 完成时。此行级锁由包含创建锁的 DML 的事务控制。当事务提交或回滚时,锁被释放。如果另一个事务试图更新同一行,它必须等到初始事务提交或回滚。
区块头包含一个 ITL(感兴趣的交易列表),其中为每个想要修改区块的交易分配了插槽。 INITRANS table 设置是一个数字,允许在 table 块上进行多个交易。默认值为低,对于高并发 tables,可设置为 10 到 50 之间的任何值。如果 INITRANS 设置为 1,则将等待下一个尝试修改同一块的事务。
所以,整个区块没有被修改;行锁在 ITL 中处理,编号分配给 table.
如果多个用户试图修改同一块中的行,Oracle 数据库如何处理这种情况?我知道他们不能修改同一行。但是它如何适用于同一块中的不同行呢? 我的意思是,Oracle 如何处理行级锁,而当您修改一行时它会修改整个块?
您应该在 dba.stackexchange.com 上提出这个问题以获得更好的答复。
行级锁发生在 DML(插入、更新、删除)或 SELECT FOR UPDATE 完成时。此行级锁由包含创建锁的 DML 的事务控制。当事务提交或回滚时,锁被释放。如果另一个事务试图更新同一行,它必须等到初始事务提交或回滚。
区块头包含一个 ITL(感兴趣的交易列表),其中为每个想要修改区块的交易分配了插槽。 INITRANS table 设置是一个数字,允许在 table 块上进行多个交易。默认值为低,对于高并发 tables,可设置为 10 到 50 之间的任何值。如果 INITRANS 设置为 1,则将等待下一个尝试修改同一块的事务。
所以,整个区块没有被修改;行锁在 ITL 中处理,编号分配给 table.