alter system kill session语句详解(19C增加了新特性)
ALTER SYSTEM KILL SESSION 会将一个会话标记为终止,回滚其正在进行的事务,释放所有会话锁,并部分回收会话资源。
你可以使用 GV$SESSION 视图中的以下值来标识会话:
- session_id:指定
SID列的值。 - serial_number:指定
SERIAL#列的值。 - instance_id(可选):指定目标会话所在实例的 ID。
不指定实例ID的情况下,kill session的会话和目标会话必须位于同一个实例上。例如:
alter system kill session 'SID,SERIAL#' immediate;
/*示例*/
alter system kill session '123,456' immediate;
指定实例ID的情况下,kill session的会话可以位于任一个实例上(推荐)。例如:
alter system kill session 'SID,SERIAL#,instance_id' immediate;
/*示例*/
alter system kill session '123,456,@1' immediate;
会话终止行为说明
如果会话正在执行某些必须完成的操作,例如等待远程数据库(dblink)的响应或回滚事务,Oracle 数据库会等待该操作完成,然后将会话标记为终止,并将控制权返回给你。
如果等待时间超过一分钟,Oracle 会将该会话标记为“待终止”,并立即返回控制权,同时提示你该会话已被标记为终止。随后,PMON 后台进程会在活动完成后将该会话正式标记为终止。
无论会话是否有正在进行的事务,Oracle 不会完全回收会话状态,直到该会话的用户发出请求并收到“会话已终止”的消息。
可选修饰符
IMMEDIATE
指定 IMMEDIATE 以指示 Oracle 数据库立即回滚正在进行的事务、释放所有会话锁、完全回收会话状态,并立即将控制权返回给你。
注意:只有在未指定
TIMEOUT的情况下,IMMEDIATE才会立即返回控制权。
IMMEDIATE 的行为类似于未加修饰符的终止操作:它会等待当前活动完成,完成后立即删除整个会话,无需等待用户再次请求,连接也会被关闭。
FORCE(19C的新修饰符)
FORCE 与 IMMEDIATE 类似,但如果发生超时,FORCE 会强制终止连接。
示例:
ALTER SYSTEM KILL SESSION '123,456' FORCE;
IMMEDIATE与FORCE的对比
| 时间点 | … KILL SESSION '123,456' IMMEDIATE; | … KILL SESSION '123,456' FORCE; |
|---|---|---|
| T0 | 会话被标记为 KILLED,开始回滚事务 | 同左 |
| T1 | 如果有大事务,继续等回滚;客户端 socket 仍然 ESTABLISHED | 同左,但立刻发 SIGKILL / TerminateThread |
| T2 | 回滚完成后才关闭 socket,客户端此时才拿到 ORA-00028 | 客户端瞬间拿到 ORA-03113(断网),socket 消失 |
| T3 | V$SESSION 要到回滚结束才清空 | V$SESSION 几乎立刻消失(PMON 后续慢清资源) |
| 默认超时 | 0 秒(不再额外等 60 s) | 5 秒(可 TIMEOUT n 覆盖) |
使用force

alert日志

使用immediate
会多一个标记要终止会话的提示


alert日志

TIMEOUT(19C的新修饰符)
指定 TIMEOUT 以设置终止会话前的最大等待时间(单位:秒)。它会覆盖默认超时时间。
当前默认超时值如下:
| 修饰符 | 默认超时时间 |
|---|---|
| 无修饰符 | 60 秒 |
IMMEDIATE | 0 秒 |
FORCE | 5 秒 |
注意:超时时的行为取决于修饰符:
IMMEDIATE:标记会话为终止。FORCE:强制终止会话。
示例:
ALTER SYSTEM KILL SESSION '123,456' TIMEOUT 20;


&spm=1001.2101.3001.5002&articleId=155441732&d=1&t=3&u=70dca6ba50b54314a922e562ceebaf84)
2583

被折叠的 条评论
为什么被折叠?



