存档

文章标签 ‘SID’

谈谈Oracle的SessionId和SID

2008年12月4日

当我用sys登陆时,查询’sessionid’,得到的是4294967295
select userenv(’sessionid’) from dual;
USERENV(’SESSIONID’)
——————–
4294967295

接着我在同一台机子上用另外一个终端继续登陆,得到的还是4294967295
select userenv(’sessionid’) from dual;
USERENV(’SESSIONID’)
——————–
4294967295

我换一台机子,继续用此用户名登陆,得到的还是4294967295

我将OracleOraDb10g_home1TNSListener服务重启,SESSIONID仍旧是4294967295

最后干脆将Oracle数据库服务重启,SESSIONID仍旧是4294967295

从这个实验可以看出,SESSIONID和登录者是关联的,是唯一的。

接下来,我用sys登陆2次,用scott登陆2次
SQL> select SID, AUDSID, USER#, USERNAME from V$Session;

SID AUDSID USER# USERNAME
———- ———- ———- ——————————
150 244 57 SCOTT
151 242 57 SCOTT
152 4294967295 0 SYS
153 4294967295 0 SYS
155 0 0
157 0 0

可以看到,V$Session中的AUDSID其实就是SESSIONID,虽然我创建了4个会话,而AUDSID唯一的就只有2个,这2个恰恰标示了有多少个用户登陆,而不管登陆的次数;而SID则是唯一的标识,只要终端登陆一次,就分配给它唯一的SID,这个SID才是真正的会话标识。有一点要注意,SID是递减的,难道只有150来个可以登陆吗?有待考证(翻阅相关资料,的确是这样的,Oracle默认就是允许150个进程访问)

数据库 , ,