** 如何在 Windows 2000 ** ** 环境中 Kill ** ** 掉单个 Oracle ** ** 线程 **
来源: http://metalink.oracle.com
关键字: Oracle Thread Kill
描述 : 本文说明在 Windows 环境下, Orakill 工具的使用
正文:
你遇到过下面类似的情况吗?一个用户进程长期占用资源而不释放,导致 Oracle 进程占用了系统的大量资源, Oralce 系统的效率变得很低。如果简单的关闭重启 Oracle 实例,势必影响所有的用户。有没有办法仅仅只 Kill 掉有问题的用户进程而不用关闭整个 Oralce 实例呢?答案是可以的,使用 Oralce 提供的一个名叫 Orakill 的工具。
大家都知道, Windows 2000 是一个基于线程的操作系统,而不是象 Unix 、 Linux 那样基于进程的操作系统。整个 Oracle 的后台进程、用户进程等,在 Windows 2000 环境下,都包含在 ORACLE.EXE 这单独的一个体系进程中了,通过查看 ’ 任务管理器 ’ ―― ’ 进程 ’ 就可以看到。如果你不是使用 MTS 多线程服务器的模式,如果你 Kill 掉 ORACLE.EXE 这个进程,将导致整个 Oracle 实例关闭,如同使用 Shutdown abort 命令一样。
由于 Windows 自己没有提过一个专门用来 Kill 掉单个线程的工具,因此 Oracle 从 Oracle7.3.3.6 开始,自己提供了一个基于字符界面的用来在 Windows 环境下强制 Kill 掉一个线程的工具―― Orakill 。
Orakill 的使用方法如下:
Dos 提示符下 :>orakill sid thread
说明: sid Oracle 的 Sid 号
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]