过着简单,真实的生活,喜欢收藏变形金刚(TFE,G1,SL系列),研究金融股市,KOF98,篮球,学习研究Oracle技术,我并不是一个全职的Oracle DBA,但是对于Oracle技术的热爱和研究,是一个不争的事实,愿意结交广大Oracle技术爱好者!MSN:oracle_kof_tf@hotmail.com

kill session的测试

上一篇 / 下一篇  2007-12-26 16:36:00 / 个人分类:Oracle数据库技术-数据库管理

按照目前的状态有两个登陆的session,username都是hujinpei.
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;

SADDR           SID    SERIAL# PADDR    USERNAME                       STATUS
-------- ---------- ---------- -------- ------------------------------ --------
676440DC          9         19 67618FE8 SYS                            ACTIVE
67645D2C         12        26267618818HUJINPEI                       INACTIVE
6764669C         13         49 67618C00 HUJINPEI                       INACTIVE

我们尝试kill其中一个
SQL> alter system kill session '12,262';

系统已更改。

此时我们发现PADDR已经改成一个虚拟地址了
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;

SADDR           SID    SERIAL# PADDR    USERNAME                       STATUS
-------- ---------- ---------- -------- ------------------------------ --------
676440DC          9         19 67618FE8 SYS                            ACTIVE
67645D2C         12        2626763AD64HUJINPEI                       KILLED
6764669C         13         49 67618C00 HUJINPEI                       INACTIVE

紧接着我们在kill第二个session
SQL> alter system kill session '13,49';

系统已更改。

SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;

SADDR           SID    SERIAL# PADDR    USERNAME                       STATUS
-------- ---------- ---------- -------- ------------------------------ --------
676440DC          9         19 67618FE8 SYS                            ACTIVE
67645D2C         12        2626763AD64HUJINPEI                       KILLED
6764669C         13         496763AD64HUJINPEI                       KILLED

我们看到了两个session拥有了同样的虚拟地址。
其实只要其中两个session,有一个touch了原来的会话,被killed的session就会被pmon回收,但是如果我们想按照原来的paddr来kill进程怎么办呢?因为先前session的PADDR已经被修改了。

可以这样:
SQL> select p.addr from v$process p where pid <> 1
  2  minus
  3  select s.paddr from v$session s;

ADDR
--------
67618818

根据这个addr我们就可以查spid了,来kill进程了。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar