对于RAC环境Oracle11g增加了新的语句,使得DBA在当前实例就可以杀掉RAC其他实例上的会话。
11G引入的这个命令使得DBA在管理会话时不需要在登陆到会话所在的实例,而在任意一个实例上都可以执行:
SQL> SELECT * FROM V$VERSION;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, HOST_NAME FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME HOST_NAME
--------------- ---------------- -------------------------------------
1 ractest1 ser1
SQL> SELECT INST_ID, SID, SERIAL#, USERNAME FROM GV$SESSION
2 WHERE USERNAME IS NOT NULL;
INST_ID SID SERIAL# USERNAME
---------- ---------- ---------- ------------------------------
1 51 20 SYSTEM
1 52 8 SYS
1 161 68 SYSTEM
1 165 9 SYS
1 166 9 SYS
2 63 29253 TEST
2 64 1275 SYS
2 135 10906 SYSTEM
2 139 9249 SYS
2 142 9 SYS
2 143 11 SYS
已选择11行。
可以看到,当前实例为实例1,而TEST用户登陆的实例是实例2,通过下面的语句可以在实例1杀掉实例2上的会话:
SQL> ALTER SYSTEM KILL SESSION '63, 29253, @2';
系统已更改。
在刚才登陆到实例2的TEST用户的会话上执行查询,发现会话已经被杀掉:
SQL> SELECT * FROM DUAL;
SELECT * FROM DUAL
*第 1 行出现错误:
ORA-00028: 您的会话己被终止
在实例1上检查会话状态:
SQL> SELECT INST_ID, SID, SERIAL#, USERNAME, STATUS FROM GV$SESSION
2 WHERE USERNAME IS NOT NULL;
INST_ID SID SERIAL# USERNAME STATUS
---------- ---------- ---------- ------------------------------ --------
1 51 20 SYSTEM ACTIVE
1 52 8 SYS INACTIVE
1 161 143 SYSTEM ACTIVE
1 165 9 SYS INACTIVE
1 166 9 SYS INACTIVE
2 64 1275 SYS INACTIVE
2 135 10947 SYSTEM ACTIVE
2 139 9249 SYS INACTIVE
2 142 9 SYS INACTIVE
2 143 11 SYS INACTIVE
已选择10行。
Oracle提供了这个语法简化了管理RAC的操作,使得用户可以在一个实例上执行更多的全局管理操作。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/196700/viewspace-702402/,如需转载,请注明出处,否则将追究法律责任。