干掉标记为KILLED的session

同事kill掉一个进程 521,查询状态:

select * from v$session where sid=521;

状态是:KILLED,但是SESSION还是没有释放锁住的资源,

查询 v$process ,得不到 SPID系统进程号,原因是 kill掉 session的SID和SERIAL#后,v$session的PADDR发生了变化,只能通过下列sql查询新的在v$process中而不在v$session中的进程:

select p.addr from v$process p where pid <>1

minus

select s.paddr from v$session s

结果是 v$process 的 addr地址,确认是否含有系统oracle的进程:

sekect spid,username,terminal,program,background from v$process

where addr in ('刚才查询出来的结果')

 

核对结果,在操作系统级执行: kill -9 XXXX, 再次查询:

select * from v$session where status='KILLED';
如果还是没有解决,就用最后一招,
alter system set events = ''immediate trace name flush_cache''(9i);
alter system flush buffer_cache(10g)
最后的这个方法会释放DB CACHE里的所有缓存,数据库会在开始的一段时间比较慢,运行一段时间后就会正常。

posted on 2009-08-19 12:06  .net学习交流  阅读(852)  评论(0编辑  收藏  举报

导航