按照目前的状态有两个登陆的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 262 67618818 HUJINPEI 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 262 6763AD64 HUJINPEI 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 262 6763AD64 HUJINPEI KILLED
6764669C 13 49 6763AD64 HUJINPEI 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进程了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12361284/viewspace-6241/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12361284/viewspace-6241/