alter system kill session ‘sid,serial#’;
如果是RAC環(huán)境,可以指定inst_id:
alter system kill session ‘sid,serial#,@inst_id’;
kill session不會真正killi掉會話。只是告訴會話把主機(jī)kill掉。有些場景下,比如等待遠(yuǎn)程數(shù)據(jù)庫replay、或者事務(wù)回滾,會話則不會立即kill掉自己,而是等待操作完成。這時,在v$session中的狀態(tài)就是“marked for kill”。后續(xù)會kill掉自己。
還可以加上immediate參數(shù):
alter system kill session ‘sid,serial#’ immediate;
immediate只是立即將控制權(quán)返回給當(dāng)前會話,而不是等待kill操作完成。
如果被標(biāo)記為kill的會話存在很久,可以從操作系統(tǒng)層面kill掉對應(yīng)的進(jìn)程。在操作系統(tǒng)層kill進(jìn)程之前,建議查看一下是否在執(zhí)行回滾操作。
alter system disconnect session
也是用來kill會話,和alter system kill session的原理類似。語法略有差別:
SQL> ALTER SYSTEM DISCONNECT SESSION ‘sid,serial#’ POST_TRANSACTION;
SQL> ALTER SYSTEM DISCONNECT SESSION ‘sid,serial#’ IMMEDIATE;
post_transaction選項(xiàng)在斷開會話之前,會等待事務(wù)結(jié)束;immediate會立即斷開會話,在進(jìn)行的事務(wù)會回滾。
disconnect會殺掉對應(yīng)會話的后臺進(jìn)程,kill不會。