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 23 27573 TEST sqlplus@oracle10g (TNS V1-V3) 4C621950 INACTIVE

1 160 17 27610 SYS sqlplus@oracle10g (TNS V1-V3) 4C624174 ACTIVE

1 144 42 27641 SCOTT sqlplus@oracle10g (TNS V1-V3) 4C624730 INACTIVE

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

法:

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

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

kill session 仅仅将会话杀掉。在有些候,由于大的事或需要较长SQL将导致需要killsession不能立即掉。这种

况将收到 "marked for kill"提示(如下),一旦会话当前事或操作完成,该会话被立即掉。

alter system kill session '4730,39171'

*

ERROR at line 1:

ORA-00031: session marked for kill

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

sys@AUSTIN> alter system kill session '146,23';

System altered.

sys@AUSTIN> alter system kill session '144,42';

System altered.

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

INST_ID SADDR SID SERIAL# PADDR USERNAME STATUS PROGRAM

---------- -------- ---------- ---------- -------- ---------- -------- ---------------------------------------------

1 4C70BF04 144 42 4C6545A0 SCOTT KILLED sqlplus@oracle10g (TNS V1-V3)

1 4C70E6B4 146 23 4C6545A0 TEST KILLED sqlplus@oracle10g (TNS V1-V3)

1 4C71FC84 160 17 4C624174 SYS ACTIVE sqlplus@oracle10g (TNS V1-V3)

注意:在查询中可以看到被掉的会话PADDR地址生了化,查询结果中的色字体。如果多sessionkill 掉,sessionPADDR

被改相同的程地址

下面的找回被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

and bitand(ksspaflg,1)!=0;

USERNAME STATUS ADDR KSLLAPSC KSLLAPSN KSLLASPO KSLLID1R KS D

---------- -------- -------- ---------- ---------- ------------ ---------- -- -

ACTIVE 4C623BB8 99 4 27468 275 EV 1

ACTIVE 4C623040 9 24 27444 0 1

ACTIVE 4C622A84 101 4 27480 274 EV 1

ACTIVE 4C6224C8 1 48 27450 0 1

ACTIVE 4C621F0C 1 48 27450 0 1

ACTIVE 4C6235FC 2 4 27468 0 1

SYS ACTIVE 4C624174 2 15 27442 0

ACTIVE 4C62081C 1 48 27440 0 1

ACTIVE 4C621394 1 48 27440 0 1

ACTIVE 4C620DD8 11 24 27476 0 1

ACTIVE 4C61F6E8 15 4 27610 0 1

ACTIVE 4C620260 222 24 27450 0 1

ACTIVE 4C61FCA4 7 25 27573 0 1

ACTIVE 4C61F12C 6 25 27573 0 1

ACTIVE 4C61EB70 4 24 27458 0 1

ACTIVE 4C61E5B4 1 48 27440 0 1

ACTIVE 4C61DFF8 2 24 27444 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 -9 27573

kill session -9 27641

四、会话SID

SQL> select userenv('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

where sid in ('2731','2734','2720','2678','2685')

and username='CTICUST'

order by inst_id;

INST_ID SADDR SID SERIAL# PADDR USERNAME STATUS PROGRAM

---------- ---------------- ---------- ---------- ---------------- ------------------ -------- ---------------------------

1 00000003DAF8F870 2678 8265 00000003DBC6CA08 MSS4USR INACTIVE JDBC Thin Client

1 00000003DAF98E48 2685 83 00000003DBC08510 MSS4USR ACTIVE JDBC Thin Client

1 00000003DAFC7B80 2720 5 00000003DBBEDA20 MSS4USR INACTIVE JDBC Thin Client

1 00000003DAFD66F8 2731 3 00000003DBBE9AE0 SYS ACTIVE racgimon@svdg0028(TNS V1-V3)

1 00000003DAFDA730 2734 15 00000003DBBEC268 MSS4USR INACTIVE JDBC Thin Client

2 00000003DAFD66F8 2731 1 00000003DBBE92F8 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 order by 1;

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')

order by 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值