v$session SERIAL#的含义
问题
大家都知道Kill Session的时候要知道 SID和SERIAL#, 语法如下:
Alter system kill session 'SID,SERIAL#'
但是为什么单单就一个SID不够呢?
但是为什么单单就一个SID不够呢?
答案:
sid 会重用,当同一个SID被重用时,serial#会增加,不会重复。
比如你在10:00时发现有一个SID 为10 ,serial#为100的session 不正常,想杀掉他,要是直接用kill sid 10 ,而同时这个session 主动退出,新session又来了,而又正好用了10这个SID (这时新session的serial#不会=100,只会比100高),就会发生误杀的情况。所以Oracle要求我们在杀session时,必须同时指定sid和serial#.
比如你在10:00时发现有一个SID 为10 ,serial#为100的session 不正常,想杀掉他,要是直接用kill sid 10 ,而同时这个session 主动退出,新session又来了,而又正好用了10这个SID (这时新session的serial#不会=100,只会比100高),就会发生误杀的情况。所以Oracle要求我们在杀session时,必须同时指定sid和serial#.
从另外一个角度上说,sid
在同一个instance的当前session中是一个unique key, 而sid
,serial#则是在整个instance生命期内的所有session中是unique
key。(不考虑serial#超过最大值,重用的情况)
小小菜鸟一枚
浙公网安备 33010602011771号