今天写了一个存储过程,是update 表rule的几个列值,
不小心写成死循环了
之后又oracle sql developer 就打不开表rule了,如何关掉死循环??
 

解决方案 »

  1.   

    KILL进程,,不会搞,重启数据库,不会重启数据库,重启服务器
      

  2.   

    alter system kill session 'sid,#'  immediate;
      

  3.   

    SYS用户登录
    select * from v$session
    通过USERHENAME和STATUS 查看出是那个session还处于运行状态。并得到SADDR和SERIAL#
    再alter system kill session 'SADDR,SERIAL#';即可。
      

  4.   

      select 'kill -9 ' || b.spid
        from v$session a, v$process b
       where a.paddr = b.addr
         and a.username is not null
         and sid in (select kgllksnm
                       from x$kgllk
                      where kgllkhdl in
                            (select p1raw
                               from v$session_wait
                              where event like '%library cache%'));

        查詢結果:
        ---xx-----------
         kill -9 11684
      

  5.   

    查询出sid,serial# 
    SELECT /*+ rule */ 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 l.sid = s.sid
    AND l.id1 = o.object_id(+)
    AND s.username is NOT NULL;
    #然后杀掉
    alter system kill session 'sid,serial#';
      

  6.   

    一般情况只需要kill session 就可以了,可以试试顶哈!~~
      

  7.   

    可以用PL/SQL工具中的session (会话)菜单找到active 的进程,然后kill掉
      

  8.   


    赞同,再补充一点:

    alter system kill session 'sid,serial' immediate;
    如果你用的是PLSQL,那你可能需要一段时间才能看到效果...
      

  9.   

    直接  杀掉 操作用户的  session 就可以了
      

  10.   

    你打不开,可能有已有排他锁
    通过select * from v$locked_objects 查找相关session .
    kill session.