关于Oracle 数据库update 卡死的问题


今天做eclipse项目的小修改,发现以前可以运行的项目部分今天总是卡死,开始以为是数据库没有关闭连接,导致连接堵塞,后来仔细一看每个都有关闭链接。下断点调试发现是在update的时候出问题,程序卡死在update上面。我用plsql在数据库中查询同样是卡死状态,换一条数据能够正常执行。google了一下找到问题出现的原因。

由于在执行update的时候,当程序已经执行了executeupdate 但是还没有提交事务 commit ,Oracle自动锁住该条记录。

解决方法如下。

查询出被锁的数据的sid和serial# 字段。

  1. SELECT s.sid,   
  2.     s.serial#   
  3.      
  4.     FROM v$locked_object lo,   
  5.     dba_objects ao,   
  6.     v$session s   
  7. WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;  

然后删除掉系统锁定的此记录

ALTER system KILL session 'SID,serial#'

如果有多个sid 和serial# 重复删除每条记录。

相关内容