问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle 怎样快速杀掉所有session

发布网友 发布时间:2022-04-29 03:41

我来回答

2个回答

懂视网 时间:2022-05-02 06:31

下面根据Eygel的"Oracle中Kill session的研究",构造一个案例看看kill session到底做了什么。如下所示

会话1:

SQL> conn etl/etl
Connected.
SQL> update test set status=‘invalid‘;
 
55944 rows updated.
 
SQL> update test2 set dropped=‘Y‘;
 
3090 rows updated.

会话2:

 
SQL> show user
USER is "SYS"
SQL> update etl.test2 set dropped=‘Y‘;
 
3090 rows updated.

会话3

 
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username =upper(‘etl‘) or username =upper(‘sys‘);
 
SADDR   SID SERIAL# PADDR  USERNAME   STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C233B00  27 33353 000000025F1D1FC8 ETL    INACTIVE
000000025C23A608  37 11448 000000025F1D27B0 SYS    ACTIVE
000000025C24BC50  63 54311 000000025F1D5F08 SYS    ACTIVE
 
 
SQL> alter system kill session ‘27,33353‘;
 
System altered.
 
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username =upper(‘etl‘) or username =upper(‘sys‘);
 
SADDR   SID SERIAL# PADDR  USERNAME   STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C233B00  27 33353 000000025C21A0B0 ETL    KILLED
000000025C23A608  37 11448 000000025F1D27B0 SYS    ACTIVE
000000025C24BC50  63 54311 000000025F1D5F08 SYS    INACTIVE

技术分享

 

如下所示,我杀掉了其中两个会话后,这两个会话的地址都变为000000025C21A0B0了(请见PADDR列)。当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址.此时v$process和v$session失去关联,进程就此中断。 然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间. 如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON 来清除该session.这被作为一次异常中断处理.

技术分享

SQL> alter system kill session ‘63,54311‘;
 
System altered.
 
SQL> select saddr,sid,serial#,paddr,username,status 
from v$session where username =upper(‘etl‘) or username =upper(‘sys‘);
 
SADDR   SID SERIAL# PADDR  USERNAME   STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C233B00  27 33353 000000025C21A0B0 ETL    KILLED
000000025C23A608  37 11448 000000025F1D27B0 SYS    ACTIVE
000000025C24BC50  63 54311 000000025C21A0B0 SYS    KILLED

我们根据下面SQL找到进程的地址,然后在v$process里面找到对应的spid,然后从操作系统中杀掉该进程。

SQL> select p.addr from v$process p where pid <> 1
 2 minus
 3 select s.paddr from v$session s;
 
ADDR
----------------
000000025F1D1FC8
000000025F1D5F08
 
 
 
SQL> select saddr,sid,serial#,paddr,username,status from v$session 
 where username =upper(‘etl‘) or username =upper(‘sys‘);
 
SADDR   SID SERIAL# PADDR  USERNAME   STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C233B00  27 33353 000000025C21A0B0 ETL    KILLED
000000025C23A608  37 11448 000000025F1D27B0 SYS    ACTIVE
000000025C24BC50  63 54311 000000025C21A0B0 SYS    KILLED
 
SQL> select addr, pid, spid, username from v$process where addr in (‘000000025F1D1FC8‘,‘000000025F1D5F08‘);
 
ADDR   PID SPID  USERNAME
---------------- ---------- ------------ ---------------
000000025F1D1FC8  22 12959 oracle
000000025F1D5F08  38 12971 oracle
 
SQL> ! kill -9 12959
 
SQL> ! kill -9 12971
 
SQL> select saddr,sid,serial#,paddr,username,status 
 from v$session where username =upper(‘etl‘) or username =upper(‘sys‘);
 
SADDR   SID SERIAL# PADDR  USERNAME   STATUS
---------------- ---------- ---------- ---------------- ------------------------------ --------
000000025C23A608  37 11448 000000025F1D27B0 SYS    ACTIVE

 

在ORACLE数据库杀掉会话进程有三种方式:

1: ALTER SYSTEM KILL SESSION

关于KILL SESSION Clause ,如下官方文档描述所示,alter system kill session实际上不是真正的杀死会话,它只是将会话标记为终止。等待PMON进程来清除会话。

The KILL SESSION clause lets you mark a session as terminated, roll back ongoing transactions, release all session locks, and partially recover session resources. To use this clause, your instance must have the database open. Your session and the session to be terminated must be on the same instance unless you specify integer3.You must identify the session with the following values from the V$SESSION view:
 
For integer1, specify the value of the SID column.
 
For integer2, specify the value of the SERIAL# column.
 
For the optional integer3, specify the ID of the instance where the target session to be killed exists. You can find the instance ID by querying the GV$ tables.
If the session is performing some activity that must be completed, such as waiting for a reply from a remote database or rolling back a transaction, then Oracle Database waits for this activity to complete, marks the session as terminated, and then returns control to you. If the waiting lasts a minute, then Oracle Database marks the session to be terminated and returns control to you with a message that the session is marked to be terminated. The PMON background process then marks the session as terminated when the activity is complete.
Whether or not the session has an ongoing transaction, Oracle Database does not recover the entire session state until the session user issues a request to the session and receives a message that the session has been terminated.

可以使用ALTER SYSTEM KILL SESSION ‘sid,serial#‘ IMMEDIATE 来快速回滚事物、释放会话的相关锁、立即返回当前会话的控制权。

Specify IMMEDIATE to instruct Oracle Database to roll back ongoing transactions, release all session locks, recover the entire session state, and return control to you immediately.

 

2: ALTER SYSTEM DISCONNECT SESSION

 

ALTER SYSTEM DISCONNECT SESSION 杀掉专用服务器(DEDICATED SERVER)或共享服务器的连接会话,它等价于从操作系统杀掉进程。它有两个选项POST_TRANSACTION和IMMEDIATE, 其中POST_TRANSACTION表示等待事务完成后断开会话,IMMEDIATE表示中断会话,立即回滚事务。

SQL> ALTER SYSTEM DISCONNECT SESSION ‘sid,serial#‘ POST_TRANSACTION;

SQL> ALTER SYSTEM DISCONNECT SESSION ‘sid,serial#‘ IMMEDIATE;

 

3: KILL -9 SPID (Linux) 或 orakill ORACLE_SID spid (Windows)

可以使用下面SQL语句找到对应的操作系统进程SPID,然后杀掉。当然杀掉操作系统进程是一件危险的事情,尤其不要误杀。所以在执行前,一定要谨慎确认。

SET LINESIZE 100
COLUMN spid FORMAT A10
COLUMN username FORMAT A10
COLUMN program FORMAT A45
 
SELECT s.inst_id,
 s.sid,
 s.serial#,
 p.spid,
 s.username,
 s.program
FROM gv$session s
 JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != ‘BACKGROUND‘;

 

在数据库如果要彻底杀掉一个会话,尤其是大事务会话,最好是使用ALTER SYSTEM DISCONNECT SESSION IMMEDIATE或使用下面步骤:

1:首先在操作系统级别Kill掉进程。

2:在数据库内部KILL SESSION

或者反过来亦可。这样可以快速终止进程,释放资源。

参考资料:

http://www.eygle.com/faq/Kill_Session.htm

http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php#unix

http://www.eygle.com/archives/2005/10/oracle_howto_kill_session.html

http://blog.sina.com.cn/s/blog_6d6e54f70100zfqp.html

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_2013.htm#SQLRF53047

 

ORACLE快速彻底Kill掉的会话

标签:src   optional   系统   option   tin   completed   format   invalid   时间   

热心网友 时间:2022-05-02 03:39

windows的环境,执行如下图中的SQL,并把结果存成.bat的文件,比如kill.bat, 执行一下kill.bat就可以了。
select 'orakill'||sid||' '||spid as thread from
sys.v_$process p, sys.v_$session s
where sid > 6 and
p.addr = s.paddr ;
Unix的环境,执行如下的命令就可以了!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音火山版怎么查看钱包 查看方法介绍 职能手机v3职能手机的优点和缺点 关于Cascode运放的偏置电路 vb WindowsMediaPlayer1控件怎么同时播放两个视频文件 太阳马戏团特点 【加拿大必知百科系列】加拿大文化璀璨之星—太阳马戏团 太阳马戏团简介 垃圾短信如何拦截设置 垃圾短信拦截设置的方法 vivo xplay3s用奇兔刷机刷机后打电话显示SIM卡错误是怎么回事?卡重新插... 为什么我的vivo xplay3s联通卡插上去显示无SIM卡呢? 如何快速的杀掉Oracle的Session 如何杀掉(kill)Oracle中的会话(Session) 人们使用的避雷针的工作原理是什么? 手上有z5 想入黑砖或者zx2 选哪个 提前放电避雷针的安装方法 要拜访医药代表几次才能加到医生微信 喜欢xk的调音,zx2和黑砖哪个更适合 网上让加微信的医生可以添加吗 如何做简单的避雷针接地 避雷器怎么接线?需接地吗? 房子怎么安装避雷针? 工地脚手架的防雷接地,怎么接法才标准 避雷针的安装方法 怎么安装避雷针 抖音怎么设置不把我的好友推荐给别人- 问一问 索尼Z3+ 究竟升级了哪里 魅族MX5和 索尼Z3比起来,哪个更值得入手? 想买索尼Z3或者苹果6,担心索尼的安卓系统越来越卡,也担心苹果手机的各种*以及内存太小 索尼z3与z2哪个续航能力强 QQ邮箱独立密码弄忘了怎样才能找回 怎么用oracle客户端杀掉session 天津口腔医院加了大夫的微信从哪找 索尼Walkman NW-WM1A作为HiFi播放器它的音质表现如何? 索尼zx2和nw wm1a哪个好点,和同价位性价比高的音质差多少 耳机是鸟塞 如何杀掉Oracle的Session 我在百度问了大夫他让我把照片发给他,我不会发,麻烦告我怎么发 索尼大法好,过气网红SONY NW-ZX2 无损播放器 买不买 如何杀掉Oracle中的会话 医生会主动加你吗? 请问各位,索尼黑砖nw-wm1a的音质会比iPhoneXs好吗?如果耳机用的是威士顿w80 oracle如何关掉一个用户的session 会选择索尼大法Walkman听音乐吗 一朵鲜花插在牛粪上还有什么歇后语 象棋怎样从入门到高手? 如何使用PL/SQL Developer查看和杀掉session sony黑砖搭配IE800怎么样 鲜花插到牛屎上歇后语 如何迅速杀掉数据库里inactive的会话 怎样从入门到高手?(象棋) 求解,索尼walkman支持什么视频格式