Jur*_*ury 5 sql oracle sessionid
我有考试题,找不到答案.为什么sid
强制要求执行KILL SESSION
命令?
KILL SESSION
语法:ALTER SYSTEM KILL SESSION 'sid,session#[@inst_id]' [IMMEDIATE];
其中sid是"唯一"会话标识符.引号中的唯一因为它在当前时刻是唯一的,例如,Oracle服务器可以具有会话一些sid,但是在此会话结束之后,此sid可以用于其他会话.在操作系统中Sid
是类比pid
的.
Session#是一个串行会话号; 这是一个会议柜台.服务器在数据库启动时清除计数器.因此,session#是会话的真正唯一标识符.
我不明白为什么sid
强制KILL SESSION
命令.我想,有可能session#
只使用.
谢谢.
您需要 SID 和 SERIAL#。oracle参考有这样的说法:
SID 会话标识符
SERIAL# 会话序列号。用于唯一标识会话的对象。如果会话结束并且另一个会话以相同的会话 ID 开始,则保证会话级命令应用于正确的会话对象
因此,虽然 SID 是唯一的,但它可以重复使用。所以我想添加一个 SERIAL# 将确保您不会杀死一个新连接的会话,该会话恰好使用您试图杀死的相同 SID(如果它们在您执行命令之前已经断开连接)。
更新以回应陪审团的评论:
我不能说为什么它是这样实现的,只是我根据文档对实现的理解:SID 是可重用的,SID 中的 SERIAL# 不是。所以,作为一个例子:
为什么要这样实现?保持数字大小可管理,也许?减少争用?重用已分配的资源(由 SID 表示)?我不知道。
我找到了!序列serial#
是循环的。如果int
使用了20 亿次登录后,或者short
使用了32k后,数字将被重用。因此,serial#
不使用任何其他东西并不能提供真正独特的枚举。
但sid
在某一刻是独一无二的。所以,对sid,serial#
是真正独一无二的。
您不能使用serial#
或sid
管理会话,您应该成对使用它。
感谢您的时间!
归档时间: |
|
查看次数: |
5895 次 |
最近记录: |