如何彻底杀掉不良用户会话

在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

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

时间: 2024-10-08 16:42:25

如何彻底杀掉不良用户会话的相关文章

【技巧】如何让普通用户可以杀掉自己用户的会话

 [技巧]如何让普通用户可以杀掉自己用户的会话   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 如何让普通用户可以杀掉自己用户的会话(重点)     Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimia

关于MySQL用户会话及连接线程

0.概念理解:用户会话和连接线程是什么关系? 用户会话和用户连接线程是一一对应的关系,一个会话就一个用户连接线程. 问题描述: 如果系统因为执行了一个非常大的dml或者ddl操作导致系统hang住,我们想断掉这个操作,怎么办? 解决办法: 1.kill thread:杀死用户的会话 但是时间长,效果不佳:前滚+回滚,前提是已经进行了很长时间,回滚就需要更多的时间 2.kill mysqld进程:推荐,用这种杀进程的方式,速度快 kill -9 进程号(ps aux 查看进程号) 数据库先前滚,不

在linux下如何终止用户会话?

公司使用的监控工具是cacti,在阈值里的设置是当已登录用户超过2个的时候就会报警.那么,我的疑问就出来了,如何终止多于的用户会话呢?我自己又是哪个用户会话呢,总不能自己把自己给终止会话了吧. 第一步:查看哪些IP在操作服务器,who命令 [[email protected] ~]# who root     tty1         2014-04-20 08:42 root     pts/0        2014-04-20 09:10 (192.168.204.50) 第二步:查看服务

EBS用户会话失效时间调整方法

完整图文版:http://note.youdao.com/share/?id=6ac11aa32c89feff03e02ef56aa2000e&type=note your session has expired. Please     log back in using the login server, and reload this pages when finished After I log in EBS website,if I don't operate for a short t

同一个PC只能运行一个应用实例(考虑多个用户会话情况)

原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况) 1 class Program 2 { 3 private static Mutex m; 4 5 [STAThread] 6 static void Main() 7 { 8 bool createNew = false; 9 10 /* 11 * 在运行终端服务的服务器上,已命名的系统 mutex 可以具有两级可见性. 12 * 如果名称以前缀“Global\”开头,则 mutex 在所有终端服务器会话中均为可见. 13 * 如果

linux 终止用户会话

第一步使用 tty 命令 查看自己会话id:本例中会话id为1[[email protected] ~]# tty/dev/pts/1[[email protected] ~]# 第二步 使用 w 命令 查看当前服务器有哪些会话:[email protected]:~$ w 10:14:59 up 20 min,  2 users,  load average: 0.00, 0.09, 0.27USER     TTY      FROM              [email protecte

限制window下只允许一个用户名登录一个会话避免登录多个相同用户名的用户会话

限制window下只允许一个用户名登录一个会话避免登录多个相同用户名的用户会话可以通过以下设置实现如下图:(红色方框里)

如何杀掉一个用户下的所有进程并drop掉这个用户

Copy the sample code below into a file named kill_drop_user.sql.Open SQL*Plus and connect as user SYS to your databaseSQL> CONNECT sys/[email protected] AS SYSDBACreate a user called TEST with password TESTSQL> GRANT connect, resource TO test IDENTI

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话