故障描述
- 业务侧反映,kill会话之后,查询会话状态为
killed
,但是会话一直不释放,无法进行DML操作
故障排查
- 1)查看当前数据库中,哪些对象有锁。查询结果中的
SID=1288
与业务侧提供的会话一致
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

select * from v$session where sid=1288

- 3)根据查询到的PADDR,查询
v$process
,定位会话对应的操作系统进程

- 4)根据查询到的TADDR,查询
v$transaction
,定位会话对应的事务。可以看到当前事务仍然是ACTIVE状态,因此表上的锁并未释放

[oracle@rac1 ~]$ ps -ef|grep 33733
oracle 33733 1 0 16:05 ? 02:48:01 oraclerac1 (LOCAL=NO)
oracle 19670 16636 0 18:53 pts/1 00:00:00 grep --color=auto 33733
[oracle@rac1 ~]$ kill 33733