Oracle 彻底 kill session

--***************************

-- Oracle kill session

--***************************

 kill session是DBA到的事情之一。如果kill 掉了不kill 的session具有破坏性,因此可能的避免这样错误发生。同应当注意,如果kill 的sessionOracle 后台程,容易库实例宕机。

通常情下,不需要操作系统级别杀Oracle会话进程,但是如此,下面的描述中出了Oracle级别杀会话以及操作系统级别杀程。

 一、得需要kill session的信息(使用V$SESSION 和 GV$SESSION视图)

SET LINESIZE 180
COLUMN spid FORMAT A10
COLUMN username FORMAT A10
COLUMN program FORMAT A40

SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program,
       s.paddr,
       s.STATUS
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';

 INST_ID   SID    SERIAL# SPID    USERNAME   PROGRAM                         PADDR    STATUS
-------- ----- ---------- ------- ---------- ------------------------------- -------- --------
       1   146         2327573   TEST       sqlplus@oracle10g (TNS V1-V3)    4C621950 INACTIVE
       1   160         1727610   SYS        sqlplus@oracle10g (TNS V1-V3)    4C624174 ACTIVE
       1   144         4227641   SCOTT      sqlplus@oracle10g (TNS V1-V3)    4C624730 INACTIVE

二、使用ALTER SYSTEM KILL SESSION命令实现

  法:

SQL> ALTERSYSTEMKILLSESSION'sid,serial#';
SQL> ALTERSYSTEMKILLSESSION'sid,serial#'IMMEDIATE;

RAC境下的kill session ,需要搞清楚需要kill 的session 位于哪个节点,可以查询GV$SESSION视图获得。

kill session仅仅将会话杀掉。在有些候,由于大的事或需要较长SQL将导致需要kill的session不能立即掉。这种情况将收到 "marked for kill"提示(如下),一旦会话当前事或操作完成,该会话被立即掉。

alter system kill session '4730,39171'
*
ERRORat line 1:
ORA-00031: session marked forkill

 在下面的操作中将杀会话146144

 

sys@AUSTIN> altersystemkillsession'146,23';
System altered.

sys@AUSTIN> altersystemkillsession'144,42';
System altered.

sys@AUSTIN> select inst_id,saddr,sid,serial#,paddr,username,status,program from gv$session where username isnotnull;

INST_ID SADDR       SID    SERIAL#  PADDR    USERNAME   STATUS   PROGRAM
------- -------- ------- ---------- -------- ---------- -------- ---------------------------------------------
     14 C70BF04     144         424  C6545A0 SCOTT      KILLED   sqlplus@oracle10g (TNS V1-V3)
     14 C70E6B4     146         234  C6545A0 TEST       KILLED   sqlplus@oracle10g (TNS V1-V3)
     14 C71FC84     160         174  C624174 SYS        ACTIVE   sqlplus@oracle10g (TNS V1-V3)

 注意:在查询中可以看到被掉的会话PADDR地址生了化,查询结果中的色字体。如果多session被kill 掉,session的PADDR被改为相同的程地址

 通过下面的找回被kill 掉的ADDR先前的地址

 SELECT s.username,s.status,
    x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP,
    decode(bitand (x.ksuprflg,2),0,null,1)
    FROM x$ksupr x,v$session s
    WHERE s.paddr(+)=x.addr
    andbitand(ksspaflg,1)!=0;      

    USERNAME   STATUS   ADDR       KSLLAPSC   KSLLAPSN KSLLASPO       KSLLID1R KS D
    ---------- -------- -------- ---------- ---------- ------------ ---------- -- -
               ACTIVE   4C623BB8         99          427468               275 EV 1
               ACTIVE   4C623040          9         2427444                 0    1
               ACTIVE   4C622A84        101          427480               274 EV 1
               ACTIVE   4C6224C8          1         4827450                 0    1
               ACTIVE   4C621F0C          1         4827450                 0    1
               ACTIVE   4C6235FC          2          427468                 0    1
    SYS        ACTIVE   4C624174          2         1527442                 0
               ACTIVE   4C62081C          1         4827440                 0    1
               ACTIVE   4C621394          1         4827440                 0    1
               ACTIVE   4C620DD8         11         2427476                 0    1
               ACTIVE   4C61F6E8         15          427610                 0    1
               ACTIVE   4C620260        222         2427450                 0    1
               ACTIVE   4C61FCA4          7         2527573                 0    1
               ACTIVE   4C61F12C          6         2527573                 0    1
               ACTIVE   4C61EB70          4         2427458                 0    1
               ACTIVE   4C61E5B4          1         4827440                 0    1
               ACTIVE   4C61DFF8          2         2427444                 0    1
                        4C624730          0          0                       0
                        4C621950          0          0                       0
                        4C61DA3C          0          0                       0

或者根据下面的来获化的addr

sys@AUSTIN> select p.addr from v$process p where pid <> 1
  2  minus
  3  select s.paddr from v$session s;

ADDR
--------
4C621950
4C624730 

 三、在操作系统级别杀会话

  会话对应的操作系ID

sys@AUSTIN> select SPID from  v$process where ADDR in ('4C621950','4C624730') ;        

SPID
----------
27573
27641

使用kill 命令来杀操作系统级别进ID

kill session -927573
kill session -927641    

四、会话SID

 

SQL> selectuserenv('sid') from dual;

  USERENV('SID')
  --------------
             627    

五、多个会话需要kill

  1.根据定的SID()找需要会话的信息,包括位于个实

set linesize 160
    col program format a35
    col username format a18
    select inst_id,saddr,sid,serial#,paddr,username,status,program from gv$session
    wheresidin ('2731','2734','2720','2678','2685')
    and username='CTICUST'
    orderby inst_id;

       INST_ID SADDR                   SID    SERIAL# PADDR            USERNAME           STATUS   PROGRAM
    ---------- ---------------- ---------- ---------- ---------------- ------------------ -------- ---------------------------
             100000003DAF8F870       2678       826500000003DBC6CA08 MSS4USR            INACTIVE JDBC Thin Client
             100000003DAF98E48       2685         8300000003DBC08510 MSS4USR            ACTIVE   JDBC Thin Client
             100000003DAFC7B80       2720          500000003DBBEDA20 MSS4USR            INACTIVE JDBC Thin Client
             100000003DAFD66F8       2731          300000003DBBE9AE0 SYS                ACTIVE  racgimon@svdg0028(TNS V1-V3)
             100000003DAFDA730       2734         1500000003DBBEC268 MSS4USR            INACTIVE JDBC Thin Client
             200000003DAFD66F8       2731          100000003DBBE92F8                    ACTIVE   oracle@svdg0029 (ARC0)  

   上面的查询中有一SID2731的位于2上。

    也可以通下面的方式来获RAC点信息,便于确定需要kill 的session究竟位于个节点。

set linesize 160
col HOST_NAME format a25
SQL> select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,STATUS from gv$instance orderby1;

INSTANCE_NUMBER INSTANCE_NAME    HOST_NAME                 VERSION           STATUS
--------------- ---------------- ------------------------- ----------------- ------------
             1 O02WMT1A         svd0051                  10.2.0.4.0        OPEN
             2 O02WMT1B         svd0052                  10.2.0.4.0        OPEN
             3 O02WMT1C         svd0053                  10.2.0.4.0        OPEN 

  2.使用下面查询来生成kill session

select'alter system kill session '''|| sid ||',' ||SERIAL# ||''''||';'  from gv$session
where sid in ('2731','2734','2720','2678','2685')
orderby inst_id;       

    得下列kill session句,根据要求由于此次需要掉的session全部位于1,因此登1行下面的  

alter system kill session '2678,8265';
alter system kill session '2685,83';
alter system kill session '2720,5'; 
alter system kill session '2731,3';
alter system kill session '2734,15';
alter system kill session '2731,1';    --此条命令不需要执行,该session位于节点2。

       

六、有kill session考:

  Oracle How To:如何快速杀死占用过多资源(CPU,内存)的数据库进程   

  Oracle中Kill session的研究

  Killing Oracle Sessions

 

七、更多

 

有关性能优化请参考

Oracle 硬解析与软解析

共享池的调整与优化(Shared pool Tuning)

Buffer cache 的调整与优化(一)

Oracle 表缓存(caching table)的使用

 

有关闪回特性请参考

Oracle 闪回特性(FLASHBACK DATABASE)

Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)

Oracle 闪回特性(Flashback Query、Flashback Table)

Oracle 闪回特性(Flashback Version、Flashback Transaction)

 

有关基于用户管理的备份和备份恢复的概念请参考

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)

 

有关RMAN的恢复与管理请参考

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值