如何在Windows 2000环境中Kill掉单个Oracle线程
2024-08-29 13:30:53
供稿:网友
如何在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:[email protected]