网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  教你在windows环境下kill掉oracle的线程     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:56次  录入:管理员--2008-06-04  
 

【赛迪网-it技术报道】你遇到过下面类似的情况吗?一个用户进程长期占用资源而不释放,导致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。

在nt中如果使用alter system kill session 'sid,serial#'来清楚会话,在执行之后该会话的状态会变为killed,但是有时候这个状态会保持很长时间,直到最后被清除。

如果想更快地从内存中清理这个会话,那么可以在使用了alter system之后,再在nt中使用orakill实用程序(该程序随oracle数据库同时安装)直接清除该会话的线程。

orakill的使用方法如下:

dos提示符下:>orakill sid thread

说明: sid oracle的sid号

thread oracle的线程id号

首先取得被杀掉的会话的thread number:

set pagesize 100

set linesize 100

column program format a20

select s.sid as "sid", s.serial# as "serial#", p.spid as "threadid",

s.osuser

as "osuser", s.program as "program"

from v$process p, v$session s

where p.addr = s.paddr(+)

order by s.sid

输出可能如下:

sid serial# threadid osuser program

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

...

10 809 102 user01 prog.exe

11 345 333 seuser app.exe

15 719 422 user01 prge.exe

20 345 123 seus acco.exe

555

324

然后在命令行窗口执行orakill命令

例:orakill orcl 555

orakill orcl 324

orakill的命令帮助如下:

c:>orakill

usage: orakill sid thread

where sid = the oracle instance to target

thread = the thread id of the thread to kill

the thread id should be retrieved from the spid column of a query such

as:

select spid, osuser, s.program

from v$process p, v$session s

where p.addr = s.paddr;

需要注意的是,如果你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.

 
 
上一篇: 通过进行正规化的表格设计提升应用性能 (1)    下一篇: 讲解数据库变慢的三种情况及具体处理方法
  相关文档
轻松掌握关闭oracle死锁进程的具体步骤 05-12
Oracle9i与SYBASE ASE12.5相比的几个不足 08-05
如果有输出参数则必须使用output做修饰符 04-01
讲解forall与bulk collect的使用方法 05-12
教你使用智能优化器提高Oracle性能极限 05-27
数据库应用系统的开发具体分为哪几个阶段 (1) 03-04
oracle 9.2.0.1版本函数编译的一个bug 03-20
Oracle数据库中通过扩展SQL跟踪数据 04-11
剖析Oracle的网络结构轻松解决连接问题 09-29
在Windows系统下完全卸载Oracle的好方法 09-29
开发篇之 Oracle触发器心得体会 05-27
oracle数据库与用户角色权限相关的视图 05-07
Oracle数据库数据锁定机制全面解析 05-13
教你快速掌握"patindex"函数的使用方法 07-01
详细讲解oracle在solaris下的性能与调整 (1) 04-28
Oracle 9i数据库中动态重配置深入分析 04-11
Oracle中利用哈希函数提高查询速度 04-11
用pipelined table实现split函数的示例 06-23
用一个实例讲解oracle的自定义聚集函数 05-05
实例讲解oracle数据库自动增加id的sql 08-01
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息