文章目录
- 一、查询session是否占用
- 二、通过对象名称定位对应SID
- 三、通过对应的SID查询session信息
- 四、kill掉session
最近有几个客户也询问过:我的存储过程怎么编译、调试有时候就卡死不动了,而且还没办法删除,本次又碰到实际情况,做一个简单查询判断
一、查询session是否占用
通过动态性能表v$db_object_cache我们可以获取到表,索引,簇,PL/SQL过程和包装,并触发。在共享池对象级别的统计信息。
此次要查询的存储过程名称为:CONFIRMFEE
select * from v$db_object_cache where name ='CONFIRMFEE';
这里发现LOCKS=2,那也就意味着有2个session在锁定着存储过程。
二、通过对象名称定位对应SID
select * from v$access where object='CONFIRMFEE';
三、通过对应的SID查询session信息
session信息中可以看到机器信息,调用程序有助于大家排查
select * from v$session where sid='2575';
四、kill掉session
select 'alter system kill session '''||SID||','||SERIAL#||''' immediate;' from v$session where sid='1320';
至此,应该可以解决大部分的此类问题。