SYS用户登录 select * from v$session 通过USERHENAME和STATUS 查看出是那个session还处于运行状态。并得到SADDR和SERIAL# 再alter system kill session 'SADDR,SERIAL#';即可。
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
查询出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#';
一般情况只需要kill session 就可以了,可以试试顶哈!~~
可以用PL/SQL工具中的session (会话)菜单找到active 的进程,然后kill掉
赞同,再补充一点: 用 alter system kill session 'sid,serial' immediate; 如果你用的是PLSQL,那你可能需要一段时间才能看到效果...
直接 杀掉 操作用户的 session 就可以了
你打不开,可能有已有排他锁 通过select * from v$locked_objects 查找相关session . kill session.
select * from v$session
通过USERHENAME和STATUS 查看出是那个session还处于运行状态。并得到SADDR和SERIAL#
再alter system kill session 'SADDR,SERIAL#';即可。
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
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#';
赞同,再补充一点:
用
alter system kill session 'sid,serial' immediate;
如果你用的是PLSQL,那你可能需要一段时间才能看到效果...
通过select * from v$locked_objects 查找相关session .
kill session.