`
insertyou
  • 浏览: 901831 次
  • 性别: 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

    ### Oracle Kill Session:详解与实践 在Oracle数据库管理与维护过程中,“Oracle Kill Session”是一项非常重要的操作技巧。本文将从理论到实践多个层面深入探讨如何有效地执行“Oracle Kill Session”,帮助...

    Oracle_Kill_Session_终极篇

    ### Oracle_Kill_Session_终极篇:深入解析与实践 #### 环境配置与背景 在探讨Oracle数据库中如何有效地管理会话(session)时,本文档聚焦于Oracle Database 10g Enterprise Edition Version 10.2.0.2.0的64位版本...

    oracle中已killed session的处理

    在Oracle数据库管理中,有时会遇到一些异常情况,比如某个Session长时间未响应或占用大量资源,这时可能需要管理员手动干预,通过`ALTER SYSTEM KILL SESSION 'SID,SERIAL#'`命令来强制终止这个Session。然而,在...

    kill system session(解决oracle死锁)

    kill system session(解决oracle死锁)

    有效关闭Oracle死锁进程,和释放状态为killed的session

    在Oracle数据库管理中,处理死锁进程和释放状态为killed的session是一项关键技能,尤其对于维护数据库性能和稳定性至关重要。以下将详细阐述如何通过一系列步骤有效地关闭Oracle死锁进程,以及如何释放状态为killed...

    如何快速的杀掉Oracle的Session

    需要注意的是,使用`alter system kill session`命令,被结束的Session状态会变为killed,Oracle会在下次该用户交互时清理。然而,直接杀死进程会导致Session的`paddr`被修改,如果多个Session被杀,它们的`paddr`...

    Oracle 数据库解锁session方式

    Oracle 数据库解锁session方式

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

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

    快速杀死oracle的session

    ### 快速杀死Oracle的Session方法详解 在Oracle数据库管理中,有时会遇到需要迅速终止某个或某些Session的情况。这通常发生在系统响应缓慢、需要紧急关闭特定进程时,或者是在执行`shutdown immediate`命令但发现...

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

    总结来说,安全快速地批量删除Oracle数据库外部会话涉及到对`ALTER SYSTEM KILL SESSION`、`ALTER SYSTEM DISCONNECT SESSION`命令的熟练运用,以及可能的与操作系统交互。在执行这些操作时,务必小心谨慎,避免对...

    重启oracle服务,删除session

    ps -ef | grep $ORACLE_SID | grep -v ora_ | grep LOCAL=NO | awk '{print $2}' | xargs kill ``` 此命令会列出所有与当前Oracle实例相关的进程,并筛选出非本地会话(即远程连接),然后逐一杀死这些进程。 之后...

    oracle kill 进程

    ### Oracle Kill 进程详解 #### 一、概述 在Oracle数据库管理中,有时会遇到因为某些进程长时间运行导致系统响应变慢的情况。在这种情况下,管理员可能需要采取措施来终止这些进程,即“Kill”进程。本文将详细...

    ORACLE进程无法KILL处理方案.docx

    在 ORACLE 数据库中,当我们尝试 kill 一个进程时,可能会出现状态被置为 "KILLED" 但是锁定的资源长时间不释放的情况,这会导致错误提示 ORA-00030: User session ID does not exist 或 ORA-00031: session marked ...

    oracle_v$session_v$session_wait用途详解

    ALTER SYSTEM KILL SESSION ':sid', ':serial#'; ``` - **进程地址 (PADDR) 查询** - 通过进程地址 (PADDR) 可以获取到与后台进程相关的信息,如进程 ID (PID)、系统 ID (SID)、系统用户名等: ```sql SELECT ...

    oracle Session与lock 解除

    ### Oracle Session与Lock解除 在Oracle数据库环境中,锁机制是一种重要的资源管理手段,它能够确保数据的一致性和并发性处理。锁(Lock)是数据库管理系统为了控制多个用户对同一数据资源的同时访问而采取的一种...

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

    Oracle数据库在操作过程中,有时会遇到ORA-00031错误,这个错误提示是“会话标记为kill(session marked for kill)”。这通常发生在使用ALTER SYSTEM KILL SESSION命令企图终止某个会话时,但由于会话正在执行无法...

    清除Oracle中长时间持锁的session

    ### 清除Oracle中长时间持锁的Session #### 背景介绍 在Oracle数据库管理过程中,有时会遇到一些长时间占用资源的进程,这些进程可能会导致数据库性能下降甚至某些操作无法执行。通常情况下,如果一个session的状态...

    Oracle_Kill_Sessio.pdf

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

    dbjob to create kill session

    根据提供的文件信息,本文将详细解释“dbjob to create kill session”的相关知识点,包括Oracle数据库中的DBMS_JOB包、如何创建任务(job)以及如何利用这些任务来终止特定的会话(session)。 ### Oracle DBMS_...

    oracle查询kill死锁方法.txt

    3. **解除死锁**:使用`ALTER SYSTEM KILL SESSION`命令来杀死会话ID为2069、序列号为27685的会话,从而解除死锁。 通过这种方式,不仅可以有效地解决当前的问题,还能为以后避免类似问题的发生提供参考。 总之,...

Global site tag (gtag.js) - Google Analytics