wabjtam123 在itpub的一个提问帖子,
我经常看到要KILL SESSION
好象不止杀一个SID,
好象是Alter system kill session 'SID,SERIAL#'
这个SERIAL#是什么东西呢?为什么不是
Alter system kill session SID就好呢???
那SERIAL#到底从哪来的东东呢???通过v$session当然可以知道SERIAL#,我是不解为什么一个会话要'SID,SERIAL两个来定位,不是
sid就是session id吗?SERIAL#到底是什么东东啊???
好象不止杀一个SID,
好象是Alter system kill session 'SID,SERIAL#'
这个SERIAL#是什么东西呢?为什么不是
Alter system kill session SID就好呢???
那SERIAL#到底从哪来的东东呢???通过v$session当然可以知道SERIAL#,我是不解为什么一个会话要'SID,SERIAL两个来定位,不是
sid就是session id吗?SERIAL#到底是什么东东啊???
rollingpig 版主的解释
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#.
从另外一个角度上说,
sid 在同一个instance的当前session中是一个unique key,
而sid ,serial#则是在整个instance生命期内的所有session中是unique key。(不考虑serial#超过最大值,重用的情况)
比如说你在10:00时发现有一个SID 为10 ,serial#为100的session 不正常,想杀掉他,要是直接用kill sid 10 ,而同时这个session 主动退出,新session近来 而又正好用了 10这个SID (这时新session的serial#不会=100,只会比100高),就会发生误杀的情况。所以Oracle要求我们在杀session时,必须同时指定sid和serial#.