oracle杀会话

1、概念oracleRAC集群死锁进程是针对对应实例的,查询的时候需要用到gv$全局试图
2、查询数据库中所有会话信息

SQL> select saddr,sid,serial#,paddr,username,status from gv$session;
SADDR                   SID    SERIAL# PADDR            USERNAME                       STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C233B00         27      33353 000000025F1D1FC8 ETL                            INACTIVE
000000025C23A608         37      11448 000000025F1D27B0 SYS                            ACTIVE
000000025C24BC50         63      54311 000000025F1D5F08 SYS                            ACTIVE
3、发送结束会话的命令
SQL> alter system kill session '27,33353' IMMEDIATE;
4、再次查看会话状态 killd
SQL> select saddr,sid,serial#,paddr,username,status from gv$session;
 
SADDR                   SID    SERIAL# PADDR            USERNAME                       STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C233B00         27      33353 000000025C21A0B0 ETL                            KILLED
     如下所示,我杀掉了其中两个会话后,这两个会话的地址都变为000000025C21A0B0了(请见PADDR列)。当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址.此时v$process和v$session失去关联,进程就此中断。 然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间. 如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON 来清除该session.这被作为一次异常中断处理.
5、直接到实例所在的服务器杀掉对应的进程(快速结束会话)
SQL>  select spid from gv$process where addr in (select paddr from gv$session where sid='1539')
------------------------------------------------总结------------------------------------------------------------------

1、找到需要kill的会话
select saddr,sid,serial#,paddr,username,status from gv$session;
2、结束会话
alter system kill session '27,33353' IMMEDIATE;
3、需要快速再找到进程,对应实例上去结束进程 kill -9 spid
select spid from gv$process where addr in (select paddr from gv$session where sid='1539')

  

  

 

  

  

posted @ 2021-12-29 11:31  苍茫宇宙  阅读(809)  评论(0编辑  收藏  举报