如何在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 mith 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:stevenqiu@sohu.com
