通过PLSQL Developer进行数据操作
1,select * from table1                  检索正常
2,select * from table1 for update       表直接死锁,无数据被检索出来请问这是为什么,有何原因为造成这样的情况,
在执行步骤2前,查询sessions并未发现有锁表现象.

解决方案 »

  1.   

    应该有别的session锁定了该表尚未提交
    select a.oracle_username,b.object_name,a.PROCESS,c.TYPE
    from v$locked_object a,all_objects b,v$session c
    where a.object_id=b.object_id
      and a.session_id=c.sid
      and b.object_type='TABLE'查看一下
      

  2.   


    基本上是记录被锁了。你这里说的 在执行步骤2前,查询sessions并未发现有锁表现象.你这里的是怎么查的,发生你这里的情况,应该有至少一个TM锁和TX锁
      

  3.   

    通过PLSQL中的Tools sessions 查询的
      

  4.   

    我试了一下,也看不到结果
    用语句查select a.oracle_username,b.object_name,a.PROCESS,c.TYPE,c.SERIAL#,c.LOGON_TIME,c.PROGRAM,c.CLIENT_INFO,c.ACTION
    from v$locked_object a,all_objects b,v$session c 
    where a.object_id=b.object_id 
      and a.session_id=c.sid 
      and b.object_type='TABLE' 
      

  5.   


    session的locks里是对象锁。你这里有dml的语句,应该有一个TM的记录在那个session里的哟。
      

  6.   


    不过导致你的sql被挂住的不是这个TM锁,而是你的记录的锁是TX锁,在v$lock表里可以查到的。不过通过相关的lock视图是查不出被hang的记录的,关于lock的具体参考http://www.inthirties.com/thread-216-1-1.html