数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
如何快速的杀掉Oracle的Session

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

一、问题的提出

很多的时候我们迅速的杀掉Oralcle的一些session,理由大体如下:

1、  一些时候,由于我们的数据量很大,相应的事务大并且多,在做shutdown immediate的时候会花费好多的时间,而我们却想用shutdown immediate的方式,而又要把数据库迅速的shutdown下来。

2、  我们的应用可能使用了会话控制,即在应用的层面控制了一些用户的连接的数量。但有时可能网络发生的瞬断,从而就产生了一些死进程,他们的状态为Inactive的状态。当我们用alter system kill session ‘sid,serial#’进行清除时,这些session的状态又变成了killed,这些就由Pmon进程来慢慢进行清除了,而你恰恰又是个急脾气。

3、  系统忽然慢了现来,你发现是某个session在做怪,想迅速把它迅速结束掉。

 

二、处理方法

其实处理方法很简单,是被一些人称为“谋杀”的一种方法。因为一个session会对应着操作系统中相应的一个进程(process),我们不使用Alter system kill session这种方式了,取而代之则是kill的方式,当session的后台进程被杀掉了,便会促使懒散的Pmon进程迅速进行清理工作。

1、  以一个session做以示例,

a、  找到你要杀掉的那个session, 并记下paddr

 

 

b、  找到这个session所对应的spid

 

c、  杀掉spid所标识的那个进程

如果你的Oracle是在Unix平台上的,可以用kill

    $kill 13824

♀如果你的Oracle是在windown平台上的,有一些的不同,因为windown是以thead来代替process的,需要用到sid和spid两个值,所用的命令也由kill替换为Orakill,格式为:orakill sid spid

       C:\>orakill 941 13824

d、  再查一下v$session,看会话在不在了。

2、  如何谋杀掉所有的Oracle的用户的进程呢?

a、  windows的环境,执行如下图中的SQL,并把结果存成.bat的文件,比如kill.bat, 执行一下kill.bat就可以了。

 

b、  Unix的环境相对来说就简单多了,执行如下的命令就可以了

$ ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCAL=NO|awk '{print $2}'|xargs kill

 然后你再shutdown immediate就很快的了。




相关文章

相关软件