数据库

本类阅读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开发
如何在Windows 2000环境中Kill掉单个Oracle线程

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

 

如何在Windows 2000环境中Kill掉单个Oracle线程

 

来源:http://metalink.oracle.com

关键字:Oracle Thread Kill

描述:本文说明在Windows环境下, Orakill工具的使用

正文:

       你遇到过下面类似的情况吗?一个用户进程长期占用资源而不释放,导致Oracle进程占用了系统的大量资源,Oralce系统的效率变得很低。如果简单的关闭重启Oracle 实例,势必影响所有的用户。有没有办法仅仅只Kill掉有问题的用户进程而不用关闭整个Oralce实例呢?答案是可以的,使用Oralce提供的一个名叫Orakill的工具。

      大家都知道,Windows 2000是一个基于线程的操作系统,而不是象UnixLinux那样基于进程的操作系统。整个Oracle的后台进程、用户进程等,在Windows 2000环境下,都包含在ORACLE.EXE这单独的一个体系进程中了,通过查看任务管理器――进程就可以看到。如果你不是使用MTS多线程服务器的模式,如果你KillORACLE.EXE这个进程,将导致整个Oracle实例关闭,如同使用Shutdown abort命令一样。

       由于Windows自己没有提过一个专门用来Kill掉单个线程的工具,因此OracleOracle7.3.3.6开始,自己提供了一个基于字符界面的用来在Windows环境下强制Kill掉一个线程的工具――Orakill

       Orakill的使用方法如下:

       Dos提示符下:>orakill sid thread

       说明: sid OracleSid

                thread  Oracle的线程id

Sql*plus工具里面可以查询到Oracle的线程号

       sql:>Select p.spid THREADID, s.osuser, s.program

       sql:>From v$process p, v$session s

       sql:>Where p.addr = s.addr

结果如下:

THREADID  OSUSER                  PROGRAM

--------- ----------------------- -----------------------------

169       SYSTEM                  ORACLE.EXE

215       SYSTEM                  ORACLE.EXE

280       SYSTEM                  ORACLE.EXE

267       SYSTEM                  ORACLE.EXE

287       SYSTEM                  ORACLE.EXE

288       SYSTEM                  ORACLE.EXE

271       SYSTEM                  ORACLE.EXE 

282       SYSTEM                  ORACLE.EXE 

266

269

239       PROD_NT\djones          SVRMGRL.EXE

281       SSMITH-PC\ssmith        SQLPLUSW.EXE

 

12 rows selected.

需要注意的是,如果你Kill掉的是Oracle的核心后台线程(DBWR, LGWR, SMON or PMON),将导致Oracle实例关闭。检查Oracle的核心后台线程的方法如下:

sql:>Select vb.name NOME, vp.programe PROCESSNAME, vp.spid THREADID, vs,sid SID

sql:>From v$session vs, v$process vp, v$bgprocess vb

sql:>Where vb.addr <> 00 and

sql:>vb.paddr = vp.addr and

sql:>vp.addr = vs.paddr

查询结果如下:

 

NOME  PROCESSNAME                         THREADID  SID

----- ----------------------------------- --------- ------

PMON  ORACLE.EXE                          169       1

DBW0  ORACLE.EXE                          215       2

LGWR  ORACLE.EXE                          280       3

CKPT  ORACLE.EXE                          267       4

SMON  ORACLE.EXE                          287       5

RECO  ORACLE.EXE                          288       6

SNP0  ORACLE.EXE                          271       7

SNP1  ORACLE.EXE                          282       8

 

8 rows selected.

                                                                 欢迎大家来交流mailto:[email protected]

 




相关文章

相关软件