知识大全 Oracle数据库中Kill session的研究

Posted 地址

篇首语:如果不能改变结果,那就完善过程。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据库中Kill session的研究相关的知识,希望对你有一定的参考价值。

Oracle数据库中Kill session的研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我们知道 在Oracle数据库中 可以通过kill session的方式来终止一个进程 其基本语法结构为:    alter system kill session sid serial# ;     被kill掉的session 状态会被标记为killed Oracle会在该用户下一次touch时清除该进程     我们发现当一个session被kill掉以后 该session的paddr被修改 如果有多个session被kill 那么多个session的paddr都被更改为相同的进程地址:    SQL> select saddr sid serial# paddr username status from v$session where username is not null;    SADDR      SID  SERIAL# PADDR  USERNAME            STATUS      E E C          B E EYGLE             INACTIVE   E           B D SYS              ACTIVE      SQL> alter system kill session ;    System altered     SQL> select saddr sid serial# paddr username status from v$session where username is not null;    SADDR      SID  SERIAL# PADDR  USERNAME            STATUS      E E C          D BD EYGLE             KILLED   E           B D SYS              ACTIVE      SQL> select saddr sid serial# paddr username status from v$session where username is not null;    SADDR      SID  SERIAL# PADDR  USERNAME            STATUS      E E C          D BD EYGLE             KILLED   E AA           B EQSP              INACTIVE   E           B D SYS              ACTIVE    SQL> alter system kill session ;    System altered     SQL> select saddr sid serial# paddr username status from v$session where username is not null;    SADDR      SID  SERIAL# PADDR  USERNAME            STATUS      E E C          D BD EYGLE             KILLED   E AA           D BD EQSP              KILLED   E           B D SYS              ACTIVE        在这种情况下 很多时候 资源是无法释放的 我们需要查询spid 在操作系统级来kill这些进程     但是由于此时v$session paddr已经改变 我们无法通过v$session和v$process关联来获得spid    那还可以怎么办呢?    我们来看一下下面的查询:     SQL> SELECT s username s status      x ADDR x KSLLAPSC x KSLLAPSN x KSLLASPO x KSLLID R x KSLLRTYP      decode(bitand (x ksuprflg ) null )     FROM x$ksupr x v$session s     WHERE s paddr(+)=x addr     and bitand(ksspaflg )!= ;    USERNAME            STATUS  ADDR    KSLLAPSC  KSLLAPSN KSLLASPO    KSLLID R KS D                          B A                                           ACTIVE  B                                          ACTIVE  B C                                         ACTIVE  B FB                                          ACTIVE  B                                         ACTIVE  B                                         ACTIVE  B AC                                          ACTIVE  B E                                         ACTIVE  B                                         ACTIVE  B D                                          ACTIVE  B                            USERNAME            STATUS  ADDR    KSLLAPSC  KSLLAPSN KSLLASPO    KSLLID R KS D     SYS              ACTIVE  B D                                             B E                    EV                       B                    EV  SYS              INACTIVE B                           SYS              INACTIVE B BF                    EV     rows selected     简化一点 其实就是如下概念:    SQL> select p addr from v$process p where pid < > minus select s paddr from v$session s;  ADDR      B E    B     现在我们获得了进程地址 就可以在v$process中找到spid 然后可以使用Kill或者orakill在系统级来杀掉这些进程     当在Oracle中kill session以后 Oracle只是简单的把相关session的paddr 指向同一个虚拟地址     此时v$process和v$session失去关联 进程就此中断     然后Oracle就等待PMON去清除这些Session 所以通常等待一个被标记为Killed的Session退出需要花费很长的时间     如果此时被Kill的process 重新尝试执行任务 那么马上会收到进程中断的提示 process退出 此时Oracle会立即启动PMON来清除该session 这被作为一次异常中断处理 cha138/Article/program/Oracle/201311/11195

相关参考

知识大全 Kill Session[Metalink]

KillSession[Metalink]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Kil

知识大全 Windows环境中Kill掉Oracle线程

Windows环境中Kill掉Oracle线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你

知识大全 用kill命令终止Oracle的过程

用kill命令终止Oracle的过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多情况下我

知识大全 oracle中process和session的关系

  在SharedServer中的Process和Oracle中的Session不是一一对应的SharedServer中的Process一个对应着Oracle中的一个或者一个以上的Session  我

知识大全 oracle中查找session中的死锁

  1查哪个过程被锁  查V$DB_OBJECT_CACHE视图:  SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER=过程的所属用户ANDLOCKS!=;  查是哪一个S

知识大全 查看哪些session正在使用哪些回滚段

  系统环境操作系统Windows  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    测试方法打开多个SQL*Plus窗口一些做一些需要回滚的操作如insertde

知识大全 ORACLE数据库的并行执行

ORACLE数据库的并行执行  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  session_ma

知识大全 Oracle10gR2 新视图:V$SESSION变化跟踪

Oracle10gR2新视图:V$SESSION变化跟踪  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 php中如何同时使用session和cookie来保存用户登录信息

本篇文章是对在php中同时使用session和cookie来保存用户登录信息的实现代码进行了详细的分析介绍需要的朋友参考下   同时使用session和cookie来保存用户登录信息数据库连

知识大全 临时表更适合做插入和查询操作

  ORACLE数据库除了可以保存永久表外还可以建立临时表temporarytables这些临时表用来保存一个会话SESSION的数据或者保存在一个事务中需要的数据当会话退出或者用户提交mit和回滚r