最近学习ORACLE优化总想着收集一些高手常用的脚本(诸多性能视图关联来关联去)直接拿来主义,但是收集多了却自己记不住,总要去查,反省一下原因,就是因为自己拿来的多,变成自己的东西少,其根源在于没有扎扎实实地打基础。
因此今后要从每一个重要的性能视图入手,把他们的内容、什么情况下使用、之间的关系等好好搞搞清楚。
先记录一下关于V$SESSION.SID&SERIAL#的关系,这是我在需要杀掉一个会话时产生的疑问:
alter system kill session 'SID, SERIAL#';
我的疑问是:为什么需要SERIAL#,不是只是用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#.
从另外一个角度上说,sid 在同一个instance的当前session中是一个unique key, 而sid ,serial#则是在整个instance生命期内的所有session中是unique key。(不考虑serial#超过最大值,重用的情况)
例如之前我需要执行alter system kill session '147, 33306';
执行之后,我还在同一个PL/SQL DEV的SQL WINDOW中重新做一个查询,就会又产生一个SID=147的SESSION,但是此时的SERIAL#变为33308了。
因此今后要从每一个重要的性能视图入手,把他们的内容、什么情况下使用、之间的关系等好好搞搞清楚。
先记录一下关于V$SESSION.SID&SERIAL#的关系,这是我在需要杀掉一个会话时产生的疑问:
alter system kill session 'SID, SERIAL#';
我的疑问是:为什么需要SERIAL#,不是只是用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#.
从另外一个角度上说,sid 在同一个instance的当前session中是一个unique key, 而sid ,serial#则是在整个instance生命期内的所有session中是unique key。(不考虑serial#超过最大值,重用的情况)
例如之前我需要执行alter system kill session '147, 33306';
执行之后,我还在同一个PL/SQL DEV的SQL WINDOW中重新做一个查询,就会又产生一个SID=147的SESSION,但是此时的SERIAL#变为33308了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26521853/viewspace-1281714/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26521853/viewspace-1281714/