select * from v$session_blockers; 或者 select * from gv$session_blockers; (在rac情况下)
通过 select count(1) from v$locked_object; 可以查出内容
首先询问客户能否提供lock table的session sid和serial#,如果客户只能提供session sid,则
可以使用:
select sid,serial#,machine,program from v$session where sid=*;
如果用户无法提供lock table的session信息则使用下面的语句查询:
col program for a20
col spid for a10
select L.TYPE TYPE,
to_number(round(L.CTIME/60)) locktime,
L.SID SID,
S.SERIAL# SERIAL#,
p.spid spid,
s.program program
from V$LOCK L,
V$SESSION S,
V$PROCESS P
where L.SID = S.SID
and P.ADDR=S.PADDR(+)
and L.type in ('TM')
and S.USERNAME not in ('SYS')
order by locktime desc;
或者:
select sid,serial#,sql_id,status,blocking_session from v$session where sid in (select session_id from v$locked_object);
TY为锁类型:
LOCKTIME为锁定时间(分钟)
LOCKTIME(分钟)最大的,一般排在第一位
--将session的sid和serial#报给客户,确认是否可以kill。
alter system kill session '1210,39611' immediate;
通过select * from v$session_blocker;可以查询出内容
可以通过下面的命令查询出产生lock的session的sql语句
select sql_text from v$sqltext where sql_id=(select sql_id from v$session where sid=1522 and serial#=39333);