来源:网海拾贝
你遇到过下面相似的景遇吗?一个用户进程长久占用资本而不开释,招致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_NTdjones SVRMGRL.EXE
281 SSMITH-PCssmith 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.
版权声明:
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追查纪律责任。