Oracle:使用“for update”忘记提交带来的麻烦

No Comments

本文的内容,如题所示。
该问题出现在运维过程中,这里(本文)的描述所基于的环境是我自己的环境中的模拟。

发生问题时候的状态如下图所示:
for_update_hang
如上图所示,在SQL*Plus中,执行对某张表的UPDATE时,操作被挂起(Hang)。

通过查看数据库锁的状态,你可以发现问题所在:

事实上,上述命令日志中看到的锁是由于另一个SQL*Plus会话中的“select … for update”引发的:

解法:
发起“for update”的会话commit或kill后,“update set …”才能正常被执行:
“for update”会话:

这时,“update set …”会话恢复正常:

注意:
Oracle并不推荐在日常开发过程中使用“for update”,因为如本例所示,在发起“for update”后,忘了“commit”,则会引起很多锁表的故障!
——————————————————————
Ending。

打赏

说点什么

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
提醒