环境节点[置顶] 如何终止特定 RAC 实例上的 session

题记:写这篇博客要主是加深自己对环境节点的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

    很多情况下,我们须要使用 alter system kill session 终止数据库上的某个 session,释放该 session 所占用的资源来解决问题。
比如,daniel 地点的环境就经常使用如下语句批量语句杀死数据库中的 session。

select 'ALTER SYSTEM KILL SESSION '''||b.sid||', '||b.serial#||''';'
from gv$access a,gv$session b
where a.SID=b.SID
and b.program like 'dis%'
group by b.sid,b.serial#;

该脚本在单实例情况下(gv$全部替换为 v$)还非常凑效,确切能够杀掉所需的 session。
但是在 RAC 环境下,必须将生成的脚本在所有实例上执行,才能杀掉全部须要杀掉的 session。
我们来关注一下 alter system kill session 的语法:
The KILL SESSION clause lets you mark a session as terminated, roll back ongoing transactions, release all session locks, and partially recover session resources. To use this clause, your instance must have the database open. Your session and the session to be terminated must be on the same instance unless you specify integer3.You must identify the session with the following values from the V$SESSION view:

KILL SESSION 'integer1, integer2[, @integer3]' [IMMEDIATE]

For integer1, specify the value of the SID column.
For integer2, specify the value of the SERIAL# column.
For the optional integer3, specify the ID of the instance where the target session to be killed exists. You can find the instance ID by querying the GV$ tables.

IMMEDIATE Specify IMMEDIATE to instruct Oracle Database to roll back ongoing transactions, release all session locks, recover the entire session state, and return control to you immediately.

在 RAC 环境下,我们使用 gv$session 视图,获得响应的 session 信息,除了要获得 session 的 sid 和 serial# 外,还须要获得 session 所运行的 inst_id,
并在 alter system kill session 子句中用 @inst_id 指定,才能杀掉该 session,否则必须连接到响应的 RAC 实例才能杀掉。

示例:

RAC 环境的节点1 上运行如下 session:
21:15:16 sys@RAC> SELECT SID, SERIAL#, INST_ID FROM GV$SESSION WHERE USERNAME='SCOTT';


       SID    SERIAL#    INST_ID
---------- ---------- ----------
       158         75          1
       
在 RAC 环境的节点2上运行如下语句即可终止该 session:

节点2:
21:17:32 sys@RAC> alter system kill session '158,75,@1';

System altered.

节点1:
21:19:26 scott@RAC> select * from dual;
select * from dual
*
ERROR at line 1:
ORA-00028: your session has been killed

在 RAC 环境下,批量脚本应修改为如下格式:

col kill_session for a50

    每日一道理
心的本色该是如此。成,如朗月照花,深潭微澜,不论顺逆,不论成败的超然,是扬鞭策马,登高临远的驿站;败,仍滴水穿石,汇流入海,有穷且益坚,不坠青云的傲岸,有“将相本无主,男儿当自强”的倔强。荣,江山依旧,风采犹然,恰沧海巫山,熟视岁月如流,浮华万千,不屑过眼烟云;辱,胯下韩信,雪底苍松,宛若羽化之仙,知退一步,海阔天空,不肯因噎废食。

    select 'alter system kill session '''||sid||', '||serial#||', @'||inst_id||';' kill_session from gv$session where username='SCOTT';

    

    转载请注明作者出处及原文链接,否则将查究法律责任:

    作者:xiangsir

    原文链接:http://blog.csdn.net/xiangsir/article/details/8957559

    QQ:444367417

    MSN:xiangsir@hotmail.com

文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
  最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

原文地址:https://www.cnblogs.com/jiangu66/p/3093683.html