【发布时间】:2010-02-03 02:10:02
【问题描述】:
这是 oracle 10g。如果我从 sqlplus 对表发出更新但不提交,那么在另一个会话中更新同一行并尝试提交,它只会挂起,直到我提交第一个。我知道有些人会争辩说这是锁定机制,但我们拥有的应用程序做同样的事情并且用户被阻止了。
避免此问题的最佳方法是什么?
【问题讨论】:
-
没有参数。它是锁定机制。
这是 oracle 10g。如果我从 sqlplus 对表发出更新但不提交,那么在另一个会话中更新同一行并尝试提交,它只会挂起,直到我提交第一个。我知道有些人会争辩说这是锁定机制,但我们拥有的应用程序做同样的事情并且用户被阻止了。
避免此问题的最佳方法是什么?
【问题讨论】:
您可以使用 NOWAIT 选项发出锁定,而不是仅仅尝试更新,例如
SELECT * FROM mytable
WHERE xxx
FOR UPDATE NOWAIT;
如果该行被其他用户锁定,Oracle 将立即引发ORA-00054: resource busy and acquire with NOWAIT specified。
【讨论】: