故障描述
- 业务侧反映,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;
![image.png kill指定的操作系统进程,释放锁oracle_会话状态](//dev-img.mos.moduyun.com/20231026/b2b3fdd3-3475-43d1-9e5b-6aefee984d6f.png)
select * from v$session where sid=1288
![image.png kill指定的操作系统进程,释放锁oracle_锁_02](//dev-img.mos.moduyun.com/20231026/ed582b39-d490-4655-8a69-1aa2c64d7d3a.png)
- 3)根据查询到的PADDR,查询
v$process
,定位会话对应的操作系统进程
![image.png kill指定的操作系统进程,释放锁oracle_kill_03](//dev-img.mos.moduyun.com/20231026/beff4e43-bc67-4ff4-a598-bda9737b19de.png)
- 4)根据查询到的TADDR,查询
v$transaction
,定位会话对应的事务。可以看到当前事务仍然是ACTIVE状态,因此表上的锁并未释放
![image.png kill指定的操作系统进程,释放锁oracle_锁_04](//dev-img.mos.moduyun.com/20231026/b2391a2c-6dc8-42d8-9ac9-16422072f879.png)
[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