• --:)欢迎访问锋网源码(:--
  • 首页
  • RSS订阅
  • 常用软件
  • 网页模板
  • 网站运作
  • 锋网学院
  • 繁體中文

  • 学院首页
  • 新闻资讯
  • 网站运营
  • 网站开发
  • 美工设计
  • 数据库类
  • 服务器类
  • 网络应用
  • 操作系统
  • 软件教学
编程开发   认证考试   网络安全   文章搜索: 高级搜索
会员登录/控制面版 您的位置: 学院首页 >> 数据库类 >> Oracle >> 文章内容
 

精彩推荐

 
 

本类推荐文章

 
 

本类阅读排行

  • ORACLE学习笔记--性能优化
  • Oracle数据库维护常用SQL语句..
  • oracle HA应用的方案参考
  • 在UNIX服务器上设置Oracle8i..
  • Oracle 数据库的备份与恢复(..
  • 在UNIX服务器上设置Oracle8i..
  • Oracle 数据库的备份与恢复(..
  • 如何在hp-ux10.20系统中正确..
  • 在一台机器配置两个listener..
  • 如何保持Oracle数据库的优良..
  • Oracle 数据库的备份与恢复
  • Oracle数据库的空间管理技巧
  • 在slackware 10下安装Oracle..
  • 在UnixWare7.1.1上安装Oracl..
  • 在Oracle中添加用户 赋权 修..
  • Oracle 10g导出的数据库能否..
  • 解决Oracle并行服务器的相关..
  • 最影响Oracle系统性能的初始..
  • 正确进行Oracle数据库性能完..
  • 详细介绍Oracle数据库的启动..
 
 

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

  • 日期:2008-06-04     人气:     出处:     作者:
  • 字体大小:
  • 小
  • 中
  • 大

你遇到过下面类似的情况吗?一个用户进程长期占用资源而不释放,导致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.

相关文章
相关软件

  • 网友评论:
  • 查看所有评论
  • 我要发表评论
 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 加入收藏 | 帮助中心 |

Copyright © 2006-2007 fwvv.net  程序支持:木翼  皖ICP备06004916号  

感谢:点击网络 联网科技 天盈信息 中国E速网 59互联  提供服务器及带宽赞助