zoukankan      html  css  js  c++  java
  • 如何彻底杀掉Oracle相关用户的会话

    在ORACLE数据库当中,有时候会使用ALTER SYSTEM KILL SESSION 'sid,serial#'杀掉一个会话进程,但是使用这个SQL语句杀掉会话后,数据库并不会立即释放掉相关的资源,有时候你会发现锁定的资源很长时间也不会释放,即使会话状态为“KILLED”,依然会阻塞其它会话。

    在ORACLE数据库杀掉会话进程有三种方式:

    1: ALTER SYSTEM KILL SESSION

          关于KILL SESSION Clause ,如下官方文档描述所示,alter system kill session实际上不是真正的杀死会话,它只是将会话标记为终止。等待PMON进程来清除会话。

          select sid,serial# from v$session where username='DEMO';查询用户的 sid,serial#

          可以使用ALTER SYSTEM KILL SESSION 'sid,serial#' 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.


    2: ALTER SYSTEM DISCONNECT SESSION

           ALTER SYSTEM DISCONNECT SESSION 杀掉专用服务器(DEDICATED SERVER)或共享服务器的连接会话,它等价于从操作系统杀掉进程。它有两个选项POST_TRANSACTION和IMMEDIATE, 其中POST_TRANSACTION表示等待事务完成后断开会话,IMMEDIATE表示中断会话,立即回滚事务。

          SQL> ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' POST_TRANSACTION;

          SQL> ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;


    3: KILL -9 SPID (Linux) 或 orakill ORACLE_SID spid (Windows)

           可以使用下面SQL语句找到对应的操作系统进程SPID,然后杀掉。当然杀掉操作系统进程是一件危险的事情,尤其不要误杀。所以在执行前,一定要谨慎确认。

           select SPID from v$process where addr in (SELECT PADDR FROM V$SESSION WHERE USERNAME='用户名字'); (找到用户的spid)

           kill -9 spid


    在数据库如果要彻底杀掉一个会话,尤其是大事务会话,最好是使用ALTER SYSTEM DISCONNECT SESSION IMMEDIATE或使用下面步骤:

          1:首先在操作系统级别Kill掉进程。

          2:在数据库内部KILL SESSION

    或者反过来亦可。这样可以快速终止进程,释放资源。

  • 相关阅读:
    向量求导几则公式备忘
    电脑硬件接触不良
    caffe编译新问题
    faster-rcnn 目标检测 数据集制作
    py-faster-rcnn 的makefile.config 注意事项
    ubuntu14.04 python + opencv 傻瓜式安装解决方案
    轻量级神经网络平台tiny-dnn实践
    OpenMP 并行编程
    React在Render中使用bind可能导致的问题
    为了cider,尝试emacs的坑
  • 原文地址:https://www.cnblogs.com/morgan363/p/11978616.html
Copyright © 2011-2022 走看看