RAC可以殺掉其他例項上的會話

perfychi發表於2012-07-25

對於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';

系統已更改。

在剛才登陸到例項2TEST使用者的會話上執行查詢,發現會話已經被殺掉:

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/27042095/viewspace-736600/,如需轉載,請註明出處,否則將追究法律責任。

相關文章