我在旧版代码库中确实存在以下情况-
'Team'
表保存有关团队和柜台的信息。它具有名为'TEAM_NAME'
和'COUNTER'
的列。
正在事务中执行以下三步操作-
LOCK
。执行完这些步骤后,请提交完整的操作。
由于第一步中对表采取了排他锁,因此其他并发事务失败。我想执行此操作而不会丢失系统中的事务。
我确实认为,如果我删除LOCK
语句并使我的方法为Synchronized
可以工作,但是我确实有4个JVM,但仍然存在并发事务。
请提出一些更好的设计方法来解决此问题。
答案 0 :(得分:0)
您几乎永远不需要在Oracle中进行手册LOCK
。如果这样做,您可能应该重新考虑自己在做什么。您可能应该做的是:
SELECT ... FOR UPDATE
。这将仅锁定该行,而不锁定整个表。在不同团队进行的并行会议可以免费继续。UPDATE ...
来更新计数器。一个更简单的方法是:
UPDATE ... RETURNING my_counter INTO ...
,这将返回计数器的更新值。