一次解决session无法完全删除问题的全过程Linux
作者:数据库 文章来源:数据库技术 点击数:7 更新时间:2006-4-8
开发环境: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 USERNAMEPADDRSTATUS
---------- ------------------------------ -------- --------
10 XNJW04192B5E2E2C 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';
ADDRPID SPIDUSERNAMESERIAL# TERMINAL
-------- ---------- ------------ --------------- ----------
----------------
2B5E2E2C44 1204SYSTEM-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,表也解锁