1、当前session中commit、rollback都可以解锁
2、在别的session中(DBA)通过
查找用户锁
select s.username,
decode(l.type,'TM','TABLE LOCK',
              'TX','ROW LOCK',
              NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
from v$session s,v$lock l,dba_objects o
where s.sid=l.sid
and o.object_id=l.id1
and s.username is not null
检查出来谁锁了该表
查看结果中object_name='你的表名'
然后得到sid,serial#
alter system kill session 'sid, serial#' 
or
alter system disconnect session 'sid, serial#' immediate;
3、select * from table for update nowait可以指定nowait

解决方案 »

  1.   

    1、使用如下语句查看一下谁(sid,serial#)锁定了该表
       SELECT A.OWNER,   
             A.OBJECT_NAME,   
             B.XIDUSN,   
             B.XIDSLOT,   
             B.XIDSQN,   
             B.SESSION_ID,   
             B.ORACLE_USERNAME,   
             B.OS_USER_NAME,   
             B.PROCESS,   
             B.LOCKED_MODE,   
             C.MACHINE,   
             C.STATUS,   
             C.SERVER,   
             C.SID,   
             C.SERIAL#,   
             C.PROGRAM  
        FROM ALL_OBJECTS A,   
             V$LOCKED_OBJECT B,   
             SYS.GV_$SESSION C 
       WHERE ( A.OBJECT_ID = B.OBJECT_ID ) 
         AND (B.PROCESS = C.PROCESS )
       --  AND  
       ORDER BY 1,2     ;   
    2、使用alter system kill session 'sid, serial#';杀掉锁定表的用户会话。
    3、可以指定nowait选项,不过也没什么必要。
      

  2.   

    我查出来 sid=34,serial#=24171 ,然后执行:
    alter system kill session '34, 24171'
    但提示
    ORA-00031:标记要删去的会话再查一次,锁定还在,请问是不是还有什么要做的??
      

  3.   

    执行
    alter system disconnect session '34,24171' immediate
    的时候又报错:
    ORA-02000:缺少POST_TRANSACTION关键字怎么办啊?
      

  4.   

    刚才又查了一次,锁定已经解除了,奇怪!这是今天下午操作的过程:
    1.按照楼上提供的方法查询锁定的会话,得到 sid=34,serial#=24171 ;
    2.alter system kill session '34, 24171';
      提示
      ORA-00031:标记要删去的会话;
    3.再查询,锁定还在(Status=KILLED),表仍无法做删除记录操作;
    4.隔了一段时间再查询,已查询不到,锁定已解除,清空表成功。问题已经解决,谢谢 penitent(只取一瓢) 和 hrb_qiuyb(大森林) 
    祝你们新年快乐!
    :)