一次解决session无法完全删除问题的全过程(原创)

王朝other·作者佚名  2006-05-27
窄屏简体版  字體: |||超大  

开发环境:win2000server+oracle9i+delphi

开发人员报告:在程序中杀了JOB,但是被操作的表还是锁表状态,

其中有一张日志表还在不断插入记录,直到执行完所有插入操作(一个漫长的等待过程)才能解锁

现场描述:oem中被杀job起的SESSION状态为killed,其中有3张表被锁点击右键--》中断会话

提示: 标记要删去的会话

===================================================================================================

处理方法一 :

1.SELECT saddr,sid,serial#,paddr,username,status FROM v$session WHERE username IS NOT NULL

example:saddr,sid,serial#,paddr,username,status FROM v$session WHERE username = 'XNJW0419' ;

SADDR SID SERIAL# PADDR USERNAME STATUS

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

542E0E6C 11 314 542B70E8 EYGLE INACTIVE 542E5044 18 662 542B6D38 SYS ACTIVE

2.ALTER SYSTEM KILL SESSION 'sid, serial#';

example:ALTER SYSTEM KILL SESSION '11,314';(注:在sqlplus中执行 )

结果: 提示标记要删去的会话 无法释放会话,未成功解锁

====================================================================================================

处理方法二 :

a、 找到你要杀掉的那个SESSION, 并记下paddr

SELECT sid, username, paddr, status FROM v$session WHERE username = '用户名' ;

example:SELECT sid, username, paddr, status FROM v$session WHERE username = 'XNJW0419' ;

SID USERNAME PADDR STATUS

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

10 XNJW0419 2B5E2E2C KILLED

b、 找到这个SESSION所对应的spid

SELECT * FROM v$process WHERE addr = '上面查寻的paddr';

example:SELECT ADDR,PID,SPID,USERNAME,SERIAL#,TERMINAL FROM v$process WHERE addr = '2B5E2E2C';

ADDR PID SPID USERNAME SERIAL# TERMINAL

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

2B5E2E2C 44 1204 SYSTEM -99 JWC

c、 杀掉spid所标识的那个进程

D:\>orakill sid spid (注:cmd命令窗口中执行 只有oracle服务器端才有orakill命令)

example: D:\>orakill oemrep 1204

提示:KILL OF THREAD id 1204 IN INSTANCE oemrep successfully signalled.

结果:成功删除该SESSION,表也解锁

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航