Oracle事务表锁定

时间:2016-09-18 06:23:38

标签: java oracle transactions transactional

考虑在单个事务中更新3个表中的3行的情况。

尝试并行执行此操作会产生什么后果?

通过 parallel ,我的意思是并行执行多个此类交易。

通过性能后果,我的意思是:有些交易是否会等到第一个交易结束?在锁定完成之前,只会执行一个事务而所有其他事务都会被锁定吗?是基于行吗?基于表?

1 个答案:

答案 0 :(得分:1)

来自border-box(Oracle 11.2):

  

行锁(也称为TX锁)是单行表的锁。   事务获取INSERT修改的每一行的行锁,   UPDATE,DELETE,MERGE或SELECT ... FOR UPDATE语句。排   在事务提交或回滚之前,锁存在。

这意味着对于数据更新,仅锁定受影响的行。如果对相同的行执行多个更新,则第一个“捕获”该行将导致其他行等待释放行(提交/回滚)。

此外,这可能会导致以下循环更新方案出现死锁:

Trans-A -> TA-RA -> TB-RB
Trans-B -> TB-RB -> TA-RA

这意味着更新需要始终具有相同的表更新顺序。

*读取不会被锁定,并且会看到最新提交的值。