有时需要终止当前用户会话。例如,您可能想要执行管理操作并需要终止所有非管理会话。本节介绍终止会话的各个方面,并包含以下主题:
- 识别哪个会话终止
- 终止活动会话
- 终止非活动会话
当会话终止时,会话的任何活动事务都会回滚,会话持有的资源(例如锁和内存区)会立即释放并可供其他会话使用。
您使用SQL语句ALTER SYSTEM KILL SESSION终止当前会话。以下语句终止系统标识为7且序列号为15的会话:
ALTER SYSTEM KILL SESSION ‘7,15‘;
识别哪个会话终止
要确定要终止哪个会话,请指定会话索引号和序列号。要识别会话的系统标识符(SID)和序列号,请查询V $ SESSION动态性能视图。例如,以下查询标识用户jward的所有会话:
1 SELECT SID, SERIAL#, STATUS 2 FROM V$SESSION 3 WHERE USERNAME = ‘JWARD‘; 4 5 SID SERIAL# STATUS 6 ----- --------- -------- 7 7 15 ACTIVE 8 12 63 INACTIVE
会话在对Oracle数据库进行SQL调用时处于ACTIVE状态。如果会话未对数据库进行SQL调用,则会话为“非活动”。
Oracle数据库参考以获取会话状态值的描述
终止活动会话
如果用户会话在终止会话时正在处理事务(活动状态),则事务将回滚并且用户立即收到以下消息:
ORA-00028: your session has been killed
如果在收到ORA-00028消息后,用户在重新连接到数据库之前提交其他语句,Oracle数据库将返回以下消息:
ORA-01012: not logged on
活动会话在执行网络I / O或回滚事务时不能中断。这种会话无法终止,直到操作完成。在这种情况下,会话将保留所有资源,直到终止。此外,发出ALTER SYSTEM语句来终止会话的会话最多等待60秒才会终止会话。如果无法中断的操作持续一分钟以上,ALTER SYSTEM语句的发布者将收到一条消息,指出会话已被标记为终止。标记为终止的会话在V $ SESSION中以状态KILLED和非PSEUDO的服务器表示。
终止非活动会话
如果会话在终止时未对Oracle数据库进行SQL调用(处于非激活状态),则不会立即返回ORA-00028消息。直到用户随后尝试使用终止的会话才会返回该消息。
当非活动会话终止时,V $ SESSION视图中会话的状态为KILLED。在用户尝试再次使用会话并接收到ORA-00028消息后,终止会话的行将从V $ SESSION中删除。
在以下示例中,非活动会话终止。首先,查询V $ SESSION以确定会话的SID和SERIAL#,然后会话终止。
1 SELECT SID,SERIAL#,STATUS,SERVER 2 FROM V$SESSION 3 WHERE USERNAME = ‘JWARD‘; 4 5 SID SERIAL# STATUS SERVER 6 ----- -------- --------- --------- 7 7 15 INACTIVE DEDICATED 8 12 63 INACTIVE DEDICATED 9 2 rows selected. 10 11 ALTER SYSTEM KILL SESSION ‘7,15‘; 12 Statement processed. 13 14 SELECT SID, SERIAL#, STATUS, SERVER 15 FROM V$SESSION 16 WHERE USERNAME = ‘JWARD‘; 17 18 SID SERIAL# STATUS SERVER 19 ----- -------- --------- --------- 20 7 15 KILLED PSEUDO 21 12 63 INACTIVE DEDICATED 22 2 rows selected.
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc.htm#ADMIN11193
原文地址:https://www.cnblogs.com/sorliran/p/9046377.html
时间: 2024-10-29 11:40:56