• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

教你在Windows环境下Kill掉Oracle的线程

发布: 2008-6-05 13:45 | 作者: 罗丽娜 | 来源: 赛迪网 | 查看: 95次 | 进入软件测试论坛讨论

领测软件测试网

教你在Windows环境下Kill掉Oracle的线程

作者:罗丽娜 来源:赛迪网

  你遇到过下面类似的情况吗?一个用户进程长期占用资源而不释放,导致Oracle进程占用了系统的大量资源,Oralce系统的效率变得很低。如果简单的关闭重启Oracle 实例,势必影响所有的用户。有没有办法仅仅只Kill掉有问题的用户进程而不用关闭整个Oralce实例呢?答案是可以的,使用Oralce提供的一个名叫Orakill的工具。

  大家都知道,Windows 2000是一个基于线程的操作系统,而不是象UnixLinux那样基于进程的操作系统。整个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.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: oracle ORACLE Oracle windows Windows 环境 线程 Kill


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网