日期:2014-05-17  浏览次数:21033 次

郁闷
update 不能更新表


求助高手们一个问题 update 不能更新表

表中只有 3 条记录,是一个测试表, 在更新的时候,偶尔能更新,偶尔就 update 不动了,就假死了,
有没有人遇到过跟我类似的问题.

更新语句  

执行的时候,就不动了,好象是 死掉一样.
update 表名 set CMS = 'dddddd' where FILENAME = 'ddddddddddddddd'; 


去 v$lock 表查询的时候,发现表死锁了,可奇怪的是,就我自己用这个表,怎么会出现这种情况,请高手们帮我分析分析,
在这里谢谢了.



------解决方案--------------------
是不是 使用过 for udpate
------解决方案--------------------
表的主键是不是CMS字段?这个表有没有外键?

你的语句是对的,有可能有外键约束的原来,不让更改

------解决方案--------------------
select * from v$session_wait
where wait_class<>'Idle';
贴出结果,看看是什么等待
------解决方案--------------------
自己打开两个不同的session修改数据,没有及时commit出现锁也很正常.出现死锁的一种情况是修改表的外键没有建立索引,楼主可看看你的表有没有参照表,如果有,参照表的外键有没有建立索引.

另外,看锁阻塞的方法是

SELECT (select username FROM v$session WHERE sid=a.sid) blocker,
a.sid,
'is blocking',
(select username FROM v$session WHERE sid=b.sid) blockee,
b.sid
FROM v$lock a, v$lock b
 WHERE a.block = 1
AND b.request > 0
AND a.id1 = b.id1
AND a.id2 = b.id2
/


------解决方案--------------------
探讨
自己打开两个不同的session修改数据,没有及时commit出现锁也很正常.出现死锁的一种情况是修改表的外键没有建立索引,楼主可看看你的表有没有参照表,如果有,参照表的外键有没有建立索引.

另外,看锁阻塞的方法是

SELECT (select username FROM v$session WHERE sid=a.sid) blocker,
a.sid,
'is blocking',
(select username FROM v$session WHERE sid=b.sid) blockee,
b.sid
FROM v$lo…

------解决方案--------------------
估计刚被锁的