标签:decode 原来 not oracleo nbsp lease body ace select
当我们使用alter system kill session ‘sid,serial#’ 在数据库中kill掉某个会话的时候,如果你观察仔细会发现v$session.paddr发生了改变,从而是的不能直接通过关联v$process.add找出spid,然后进行其他操作.本文提供三种方法找该种情况下spid的方法.
数据库版本
SQL> select * from v$version;BANNER-----------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ProductionPL/SQL Release 11.2.0.3.0 - ProductionCORE 11.2.0.3.0 ProductionTNS for Linux: Version 11.2.0.3.0 - ProductionNLSRTL Version 11.2.0.3.0 - Production |
会话1
SQL> select sid, SERIAL#,paddr from v$session where 2 sid=(select sid from v$mystat where rownum=1); SID SERIAL# PADDR---------- ---------- -------- 133 53 35FE16F4 |
会话2
SQL> select sid, SERIAL#,paddr from v$session where 2 sid=(select sid from v$mystat where rownum=1); SID SERIAL# PADDR---------- ---------- -------- 143 21 35FE2D3C |
会话3
SQL> alter system kill session ‘133,53‘;System altered.SQL> alter system kill session ‘143,21‘;System altered.SQL> select sid, SERIAL#,paddr,status from v$session where sid in(133,143); SID SERIAL# PADDR STATUS---------- ---------- -------- ---------------- 133 53 3547A3F4 KILLED 143 21 3547A3F4 KILLED |
证明alter system kill session后,v$session中的paddr发生了改变,这个时候如果需要找出原来的spid,不能使用v$session.paddr和v$process.addr关联获得
找出kill掉的spid方法1
SQL> select spid, program from v$process 2 where program!= ‘PSEUDO‘ 3 and addr not in (select paddr from v$session) 4 and addr not in (select paddr from v$bgprocess) 5 and addr not in (select paddr from v$shared_server);SPID PROGRAM------------------------------------------------ ------------------------------14260 oracle@xifenfei (L001)14256 oracle@xifenfei (L000)15300 oracle@xifenfei (TNS V1-V3)14179 oracle@xifenfei (D000)15318 oracle@xifenfei (TNS V1-V3)14252 oracle@xifenfei (N000)SQL> !ps -ef|grep 15300|grep -v greporacle 15300 14052 0 03:22 ? 00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))SQL> !ps -ef|grep 15318|grep -v greporacle 15318 15315 0 03:22 ? 00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) |
找出kill 掉的spid 方法2
SQL> SELECT s.username,s.status, 2 x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP, 3 decode(bitand (x.ksuprflg,2),0,null,1) 4 FROM x$ksupr x,v$session s 5 WHERE s.paddr(+)=x.addr 6 and bitand(ksspaflg,1)!=0;USERNAME STATUS ADDR KSLLAPSC KSLLAPSN KSLLASPO KSLLID1R KSLL DE---------- ---------------- -------- ---------- ---------- ------------------------ ---------- ---- -- ACTIVE 35FD5990 6 26 14121 0 1 ACTIVE 35FD6FD8 1 69 14055 0 1 ACTIVE 35FD8620 1 69 14055 0 1 ACTIVE 35FD9C68 1 69 14055 0 1 ACTIVE 35FDB2B0 8 27 15300 0 1 ACTIVE 35FDC8F8 12 36 15300 0 1 ACTIVE 35FDDF40 1 69 14055 0 1 ACTIVE 35FDF588 1 69 14055 0 1 ACTIVE 35FE3860 7 26 14236 0 1 ACTIVE 35FE4EA8 1 69 14224 0 1 ACTIVE 35FE64F0 63 2 14311 377 EV 1 ACTIVE 35FEA7C8 3 26 14155 258 EV 1 ACTIVE 35FE9180 59 2 14248 378 EV 1 ACTIVE 35FE9CA4 12 2 14603 0 1 ACTIVE 35FD64B4 1 69 14055 0 1 ACTIVE 35FD7AFC 2 27 14055 0 1 ACTIVE 35FD9144 2 27 15300 0 1 ACTIVE 35FDA78C 3 26 14171 0 1 ACTIVE 35FDBDD4 17 2 15255 0 1 ACTIVE 35FDD41C 22 26 14155 0 1 ACTIVE 35FDEA64 52 26 14155 0 1 ACTIVE 35FE4384 1 69 14224 0 1 ACTIVE 35FE59CC 1 69 14224 0 1 ACTIVE 35FEB2EC 2 2 14248 0 1 ACTIVE 35FEC934 11 26 14121 0 1SYS ACTIVE 35FEF5C4 4 16 14117 0 35FE0BD0 1 69 14055 0 35FE865C 1 69 14117 0 35FE7B38 1 69 14117 0 35FE16F4 1 26 14155 0 35FD4E6C 0 0 0 35FE00AC 2 279 14117 0 35FE2D3C 0 0 0 35FE7014 2 335 14117 0--挑选username和status为null的会话SQL> select spid,program from v$process where addr in ( 2 ‘35FE0BD0‘, 3 ‘35FE865C‘, 4 ‘35FE7B38‘, 5 ‘35FE16F4‘, 6 ‘35FD4E6C‘, 7 ‘35FE00AC‘, 8 ‘35FE2D3C‘, 9 ‘35FE7014‘ 10 );SPID PROGRAM------------------------------------------------ ------------------------------ PSEUDO14179 oracle@xifenfei (D000)14183 oracle@xifenfei (S000)15300 oracle@xifenfei (TNS V1-V3)15318 oracle@xifenfei (TNS V1-V3)14252 oracle@xifenfei (N000)14256 oracle@xifenfei (L000)14260 oracle@xifenfei (L001)8 rows selected.--同样可以发现spid 15300和15318的进程已经在数据库中被kill掉 |
找出kill掉的spid方法3(11g特有)
SQL> select spid,program from v$process where addr in 2 (select creator_addr from v$session where sid in(133,143));SPID PROGRAM------------------------------------------------ ------------------------------15300 oracle@xifenfei (TNS V1-V3)15318 oracle@xifenfei (TNS V1-V3) |
找出kill掉的spid方法4(11g特有)
SQL> select * from V$DETACHED_SESSION; INDX PG_NAME SID SERIAL# PID---------- ------------------------------------------------------------ ---------- ---------- ---------- 0 DEFAULT 143 21 21 1 DEFAULT 133 53 19SQL> select spid,program from v$process where pid in(21,19);SPID PROGRAM------------------------------------------------ ------------------------------15300 oracle@xifenfei (TNS V1-V3)15318 oracle@xifenfei (TNS V1-V3) |
找出 alter system kill session ‘sid,serial#’ kill 掉的数据库会话对应进程
标签:decode 原来 not oracleo nbsp lease body ace select
原文地址:https://www.cnblogs.com/liang545621/p/9410711.html