`
insertyou
  • 浏览: 862368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    oracle kill session

    orckle kill session,讲述如何去kill session

    Oracle_Kill_Session_终极篇

    Oracle_Kill_Session_终极篇

    kill system session(解决oracle死锁)

    kill system session(解决oracle死锁)

    Oracle 数据库解锁session方式

    Oracle 数据库解锁session方式

    如何快速的杀掉Oracle的Session

    当我们用alter system kill session ‘sid,serial#’进行清除时,这些session的状态又变成了killed,这些就由Pmon进程来慢慢进行清除了,而你恰恰又是个急脾气。  3、 系统忽然慢了现来,你发现是某个session在做怪...

    Oracle疑难:session无法完全删除问题

    Oracle疑难:session无法完全删除问题

    如何安全快速的批量删除Oracle数据库外部会话session

    关于KILL SESSION Clause ,官方文档描述alter system kill session实际上不是真正的杀死会话,它只是将会话标记为终止。等待PMON进程来清除会话。 可以使用如下方式来快速回滚事物、释放会话的相关锁、立即返回当前...

    oracle Session与lock 解除

    ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X 共享行专用(SRX):阻止其他...

    Oracle_Kill_Sessio.pdf

    在用Toad 使用sys as dba用户登录,kill oracle session时,发现有一些session 并杀不掉于是用命令行进行杀。 用于查找有所有session的语句: select sid,serial#,username,status from v$session where status...

    oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法

    主要介绍了oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法 ,需要的朋友可以参考下

    oracle锁表该如何解决

    废话不多说 上语句: 查询锁表语句: select object_name,...alter system kill session 'sid,serial#'; 例如: alter system kill session '20,182'; 如果杀不掉可以加个 immediate 立即杀掉 试试; alter sys

    oracle杀死锁,寻PIDKILL进程

    oracle杀死锁 ,在批量导入数据的时候,在数据库中很容易就碰到锁表了,导致长时间数据库卡死,此脚本方便找寻数据库被锁对象,如果在oracle中不能alter kill掉 说明该session已过期需要进入后台去杀掉进程

    Oracle常用技术资料合集.zip

    session_kill.txt session_sid.txt session_spid.txt shared_pool_free.txt sql_monitor.txt sql_profile.txt sqlhis_awr.txt sqlinfo_total.txt tablespace_used.txt tabstat.txt temp_used.txt transaction_get....

    oracle.txt

    select SESS.sid, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME, LO.LOCKED_MODE from V$LOCKED_OBJECT LO, DBA_OBJECTs AO, V$SESSION SESS where AO.OBJECT_ID = LO.OBJECT_ID and lo....

    oracle数据表解锁

    SELECT A.OWNER 方案名, A.OBJECT_NAME 表名, B.XIDUSN 回滚段号, B.XIDSLOT 槽号, B.XIDSQN 序列号, B.SESSION_ID 锁表SESSION_ID, ...alter system kill session '855, 25352' --139 : sid --182 : sertal#

    锁表问题解决

    Oracle锁表常用sql语句: select sess.sid, sess.serial#, ...alter system kill session '139,34268'; select * from tc_daily_quotation for update; select * from tc_Pre_Contract_Bail for update;

    Oracle 主要配置文件介绍

    GIOP) (SESSION = RAW) ) (ADDRESS = (PROTOCOL = TCP) (HOST = localhost.localdomain) (PORT = 2481)) ) ) SID_LIST_LISTENER = #命名规则 SID_LIST_+上面定义的监听器...

    获取top前10个Oracle的进程(支持多实例)

    C、支持远程进行的直接Kill功能 D、支持SQL直接执行相关请求,并返回结果 E、提供REST外部请求服务功能 [root@fj43 tmp]# ./RunApp.sh /var/tmp/connect.json Config loaded... cpu used:98.0% 11362 oracle 20...

    Oracle中查看引起Session阻塞的2个脚本分享

    主要介绍了Oracle中查看引起Session阻塞的2个脚本分享,本文给出了2个脚本来查询导致Session阻塞的原因,并给出Kill引起阻塞的Session方法,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics