oracle10g,有一个表和一个存储过程被锁了,但在v$locked_object中找不到记录,请问如何解决?

解决方案 »

  1.   


    SELECT p.spid,p.USERNAME as proname, s.USERNAME,s.STATUS,s.OSUSER,s.MACHINE, s.program,s.sid,s.PADDR,a.OBJECT
                     FROM v$process p, v$session s,V$ACCESS a
                     WHERE p.addr=s.paddr
                     and a.SID=s.SID
                     and a.TYPE = 'PROCEDURE' 
                     and s.OSUSER='Administrator' 杀掉spid所标识的那个进程 D:>orakill sid  spid (注:cmd命令窗口中执行 只有oracle服务器端才有orakill命令)
    example: D:>orakill oemrep 1204提示:KILL OF THREAD id 1204 IN INSTANCE oemrep successfully signalled.结果:成功删除该SESSION,表也解锁 
      

  2.   

    你是什么知道它被锁的?
    是不是你登录的用户不对?或者是你没有权限?
    你可登录OEM里面去查看一下,你登录的有户是否有权限查询那个表?
      

  3.   

    或者直接在v$session中查询 然后用ALTER SYSTEM KILL SESSION 'sid, serial#';去删除会话
      

  4.   

    试试下面这句查询:SELECT /*+ rule */
     lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
     o.owner,
     o.object_name,
     o.object_type,
     s.sid,
     s.serial#
      FROM v$locked_object l, dba_objects o, v$session s
     WHERE l.object_id = o.object_id
       AND l.session_id = s.sid
     ORDER BY o.object_id, xidusn DESC
      

  5.   

    要看是什么锁了,是ddl锁你找不到,dml锁才能用 v$locked_object找到可以试试:
    dba_dml_locks;
    dba_ddl_locks;