gpt4 book ai didi

sql - 为什么 'KILL SESSION' (Oracle SQL) 中需要 sid?

转载 作者:行者123 更新时间:2023-12-02 21:24:28 25 4
gpt4 key购买 nike

我有考试题,但找不到答案。为什么执行KILL SESSION命令时必须强制要求sid
KILL SESSION 语法:ALTER SYSTEM KILL SESSION 'sid,session#[@inst_id]' [IMMEDIATE];
其中 sid 是“唯一” session 标识符。引号中的唯一性是因为它在当前时刻是唯一的,例如Oracle服务器可以有一个 session 的某个sid,但是在这个 session 结束后,这个sid可以用于其他 session 。 Sid 类比操作系统中的pid
Session#序列 session 号;它是一个 session 计数器。服务器在数据库启动时清除计数器。因此,session# 确实是 session 的唯一标识符

我不明白为什么 sid 对于 KILL SESSION 命令是必需的。我认为,可以仅使用 session#

谢谢。

最佳答案

您需要 SID 和 SERIAL#。神谕reference有这样说:

SID Session identifier

SERIAL# Session serial number. Used to identify uniquely a session'sobjects. Guarantees that session-level commands are applied to thecorrect session objects if the session ends and another session beginswith the same session ID

因此,虽然 SID 是唯一的,但它可以重复使用。因此,我想添加 SERIAL# 将确保您不会终止新连接的 session ,该 session 恰好使用与您试图终止的 session 相同的 SID(如果它们在您执行命令之前已断开连接)。

更新回应陪审团的评论:

我不能说为什么它是这样实现的,只是我对文档中实现的理解:SID 是可重用的,SID 中的 SERIAL# 则不能。因此,举个例子:

  • [1,1] JOE 连接并分配 SID 1、SERIAL# 1
  • JOE 断开连接
  • [1,2] TOM 连接并分配 SID 1(重用),但 SERIAL# 增加到 2
  • [2,1] SUSAN 连接并分配 SID 2,SERIAL# 1

为什么要这样实现?也许可以保持数字大小易于管理?尽量减少争用?重用已分配的资源(由 SID 表示)?我不知道。

关于sql - 为什么 'KILL SESSION' (Oracle SQL) 中需要 sid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10668003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com