RAC下,alter system kill session报错ORA-00030: User session ID does not exist

在RAC环境下,KILL SESSION时报错ORA-00030 User session ID does not exist.

问题再现:

NODE2:

[oracle@node2 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sun Feb 11 21:27:08 2018
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> conn sh/sh
Connected.
SQL> show parameter instance_number
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_number     integer 2
SQL> select sid ,serial# from v$session where sid=userenv('sid');
       SID    SERIAL#
---------- ----------
       136    5
SQL> create table test as select a.* from all_objects a,all_objects b,all_objects c;

NODE1:

[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sun Feb 11 21:25:53 2018
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter instance_number;   
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_number     integer 1
SQL> alter system kill session '136,5';
alter system kill session '136,5'
*
ERROR at line 1:
ORA-00030: User session ID does not exist.

node2:

SQL> alter system kill session '136,5,@2';
System altered.
node1:

SQL> create table test as select a.* from all_objects a,all_objects b,all_objects c;
create table test as select a.* from all_objects a,all_objects b,all_objects c
                                     *
ERROR at line 1:
ORA-00028: your session has been killed
ORA-00028: your session has been killed

小结:对于RAC环境下的跨实例杀会话,alter system kill session 需要增加 @instance_number。其中,instance_number可通过show parameter instance_number来获取。