今日业务反馈,表stat_info表被锁,使用如下语句查询锁表对应的client以及执行的sql语句
select t2.sid,
t2.SERIAL#,
t2.CLIENT_INFO,
t3.OBJECT_NAME,
t2.STATUS,
t2.PROGRAM,
t4.SQL_FULLTEXT,
'ALTER SYSTEM KILL SESSION '||''''||T2.SID||','||T2.SERIAL#||''''||' IMMEDIATE;' SQL_EXEC
from v$locked_object t1, v$session t2, dba_objects t3,v$sql t4
where t1.SESSION_ID = t2.SID
and t1.OBJECT_ID = t3.OBJECT_ID
and t2.sql_id=t4.SQL_ID(+)
而从查询中发现,锁表的sql语句为select语句,且不包含for update等关键字,很是奇怪?
查询依赖的对象信息
SQL> select * from dba_dependencies t where t.referenced_name='STAT_INFO';
发现只有一个存储过程依赖。为P123.
查询P123,查找STAT_INFO,发现为delete操作,且上述锁表的sql语句为一个打开的cursor,类似如下:
cursor
select 语句。
begin
delete from stat_info;
锁表,锁表查询的语句为select 语句。