终止会话

有时需要终止当前用户会话。例如,您可能想要执行管理操作并需要终止所有非管理会话。本节介绍终止会话的各个方面,并包含以下主题:

  •  识别哪个会话终止
  • 终止活动会话
  • 终止非活动会话

当会话终止时,会话的任何活动事务都会回滚,会话持有的资源(例如锁和内存区)会立即释放并可供其他会话使用。

您使用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

猜你喜欢

转载自www.cnblogs.com/sorliran/p/9046377.html