网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  教你在windows环境下kill掉oracle的线程     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:57次  录入:管理员--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中"HINT"的30个用法 09-29
经验总结:sql server与oracle的数据同步 06-12
用一个实例讲解如何生成autotrace权限 04-03
将部分数据导出后导入一个统一的数据库中 03-03
使用type方式,解决in列表过长的问题 (1) 02-27
用一个实例讲解oracle数据库的pl/sql语句块 07-30
细化解析:oracle 10g的统计信息工具awr 11-15
循序渐进讲解oracle数据库管理员的职责 (1) 04-29
Oracle外部程序的触发小结 05-27
奇怪的sql:排序方法不同但结果却是一样的 03-07
全面解析oracle数据库的系统和对象权限 05-07
初学者必读:oracle监听口令及监听器安全 07-16
清除Oracle中无用索引 改善DML性能 04-11
新建Oracle数据库回滚段具体操作过程 04-11
配置windows与linux平台的data gurad (1) 05-28
详细讲解oracle数据库灾难防护的核心技术 02-29
实例解析:数据库应用程序利用外部文件 09-01
讲解oracle show parameter命令的小技巧 07-30
数据字典表truncate掉将导致数据库不可用 05-28
轻松掌握数据库及数据仓库的建模方法 03-04
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息