重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
有PL/sql软件么,登陆数据库,用tools——sessions,进入会话界面选中你要杀掉的session选择工具栏那个想像钥匙的按钮就可以杀掉了
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、虚拟主机、营销软件、网站建设、镇原网站维护、网站推广。
问 当一个session被kill掉以后 该session的paddr被修改 如果有多个session被kill 那么多个session的paddr都会被更改为相同的进程地址 在这种情况下 资源是无法释放的 我选择了查询spid 在操作系统级来kill这些进程 但是由于此时v$session paddr已经改变 我已经无法通过v$session和v$process关联来获得spid 那还可以怎么办呢?
答 具体示例如下
SQL select p addr from v$process p where pid minus select s paddr from v$session s; ADDR B E B
现在我们获得了进程地址 就可以在v$process中找到spid 然后可以使用Kill或者orakill在系统级来杀掉这些进程
当在Oracle中kill session以后 Oracle只是简单的把相关session的paddr 指向同一个虚拟地址
lishixinzhi/Article/program/SQL/201404/30531
举个例子
通过session id (SID) 找到系统进程号 然后kill 进程
SQL select spid from v$process where addr=(select paddr from v$session where rownum=1 and sid=(select userenv('SID') from dual));
SPID
------------------------
12135
spid 系统进程号
SQL ho kill -9 12135
kill 掉这个进程 就完了
SQL select sysdate from dual;
select sysdate from dual
*
第 1 行出现错误:
ORA-03135: 连接失去联系
进程 ID: 12135
会话 ID: 65 序列号: 19533
在Oracle数据库中,经常会产生一些inactive的会话,但是仍然连接到数据库,一般情况下,我们可以使用alter system kill session 'sid,serial#'; 来强制杀掉他,但是如果我们有大量的这种进程,要手动一个一个去杀掉,是比较麻烦的。
下面有个方法,可以迅速的杀掉这些进程。
SELECT 'ALTER SYSTEM DISCONNECT SESSION ''' || B.SID || ',' || B.SERIAL# ||
'''IMMEDIATE;'
FROM V$LOCKED_OBJECT A, V$SESSION B, DBA_OBJECTS C
WHERE B.SID = A.SESSION_ID
sqlplus环境下 alter system kill session 'sid,serial#';
如果不行的话在操作系统下操作:
windows: orakill 实例名 spid
linux: kill -9 spid
需要查询SID和SERIAL#,然后kill掉。
方法1、用sql语句
SHELL sqlplus /nolog
SQL conn /as sysdba
SQL set head off
SQL spool kill.txt
SQL select ‘alter system kill session ‘ || ”” || a.SID || ‘,’ || a.SERIAL# || ””||’ ;’ from v$session a where a.STATUS = ‘ACTIVE' and osuser='alex';
SQL spool off
SQL exit
SHELLsed -i ‘/^$/d’ ~/kill.txt
SHELLsqlplus /nolog
SQL conn /as sysdba
SQL @kill.txt
SQL exit
方法2、用proc
declare cursor mycur is
select b.sid,b.serial#
from v$locked_object a,v$session b
where a.session_id = b.sid group by b.sid,b.serial#;
begin
for cur in mycur
loop
execute immediate ( ‘alter system kill session ”’||cur.sid || ‘,’|| cur.SERIAL# ||”’ ‘);
end loop;
end;