update 不能更新表
求助高手们一个问题 update 不能更新表表中只有 3 条记录,是一个测试表, 在更新的时候,偶尔能更新,偶尔就 update 不动了,就假死了,
有没有人遇到过跟我类似的问题.更新语句  执行的时候,就不动了,好象是 死掉一样.
update 表名 set CMS = 'dddddd' where FILENAME = 'ddddddddddddddd'; 
去 v$lock 表查询的时候,发现表死锁了,可奇怪的是,就我自己用这个表,怎么会出现这种情况,请高手们帮我分析分析,
在这里谢谢了.

解决方案 »

  1.   

    是不是 使用过 for udpate
      

  2.   

    表的主键是不是CMS字段?这个表有没有外键?你的语句是对的,有可能有外键约束的原来,不让更改
      

  3.   

    select * from v$session_wait
    where wait_class<>'Idle';
    贴出结果,看看是什么等待
      

  4.   

    自己打开两个不同的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
    /
      

  5.   

    非常 感谢大家的帮助,这个表的结构是这样的名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                        NOT NULL NUMBER
     FILENAME                                           NVARCHAR2(500)
     CMS                                                NVARCHAR2(500)只有一个主键ID,没有外键 
    这样执行的时候,就不动了,好象是 死掉一样. 
    update 表名 set CMS = 'dddddd' where FILENAME = 'ddddddddddddddd'; 
    当我查询这个表是否被锁住时:
    SQL> SELECT /*+ rule*/ 
      2  a.sid, b.owner, object_name, object_type 
      3  FROM v$lock a, all_objects b 
      4  WHERE TYPE = 'TM' 
      5  and a.id1 = b.object_id;       SID OWNER        OBJECT_NAME        OBJECT_TYPE     
    ---------- -----------  -----------------  ----------------
            75 PM           LOG_UPLOAD          TABLE发现这个表已经被锁住了,很奇怪,就我自己在操作这个表,怎么会这样?
      

  6.   

    你自己做update,当然要加表级的共享锁tm,不加倒是怪了。
    你说卡住了,叫你看看等待视图是卡在哪里,你又不看。另外这个是等待,不是死锁。如果出现死锁,早就不卡了。