快速Kill 一个Oracle Session

为什么kill一个Session,进程状态为Killed?
可能两种原因:  
1.该session的回退操作没有完成,可能被其它会话阻塞。  
2.pmon进程繁忙,来不及清理死进程。  
 
解决办法:  
1.较缓和的kill(有回滚)
我们知道,在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:
ALTER SYSTEM KILL SESSION 'sid,serial#';  --等效于在PL/SQL Developer的session窗口中kill进程、线程。
被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.
此时,Oracle一般会处于回滚阶段,used_ublk列就是在事务中使用的undo block数。
select used_ublk from v$transaction; --若该值增加,表示正在申请新的undo block数,
过了一段时间之后,会发现used_ublk开始慢慢减小了,这说明Oracle已经发现insert操作对应的process被kill了,正在做rollback操作。


2.快速kill
kill掉该session对应的进程(UNIX)/线程(windows),强制smon清理死session.  
unix:     select process from v$session where sid='94';
          $kill -9  'process'  
windows:  select spid from v$procecess ,v$session where v$session.paddr=v$process.addr and v$session.sid='94';
          c:/>orakill  94  'spid'
3.重启数据库,让instance   recovery快速清除死session  
kill session可以使用immediate,迅速杀死session:  
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

 

另请参考:http://blog.csdn.net/waferleo/archive/2008/11/28/3403598.aspx

 

你可能感兴趣的:(oracle,windows,session,unix,kill,System)