SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
l.os_user_name,
s.machine,
s.terminal,
o.object_name,
o.object_type
FROM v$locked_object l,
dba_objects o,
v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
-- 查询阻塞会话
SELECT * FROM dba_blockers;
-- 查询等待会话
SELECT * FROM dba_waiters;
SELECT sw.sid,
sw.event,
sw.wait_class,
sw.seconds_in_wait,
sw.state,
s.username,
s.status,
s.machine,
s.program
FROM v$session_wait sw,
v$session s
WHERE sw.sid = s.sid
AND sw.wait_class != 'Idle'
ORDER BY sw.seconds_in_wait DESC;
SELECT lo.session_id,
lo.oracle_username,
lo.os_user_name,
do.object_name,
do.object_type,
lo.locked_mode
FROM v$locked_object lo,
dba_objects do
WHERE lo.object_id = do.object_id;
SELECT * FROM dba_dml_locks;
SELECT * FROM dba_lock_internal;
SELECT s.sid,
s.serial#,
s.username,
s.status,
t.start_time,
t.used_ublk,
t.used_urec
FROM v$transaction t,
v$session s
WHERE t.ses_addr = s.saddr;
如果需要分析历史锁情况,可以生成AWR报告:
-- 生成AWR报告
SELECT * FROM TABLE(dbms_workload_repository.awr_report_html(
l_dbid => (SELECT dbid FROM v$database),
l_inst_num => (SELECT instance_number FROM v$instance),
l_bid => <begin_snap_id>,
l_eid => <end_snap_id>
));
找到锁定的会话后,可以使用以下命令终止会话:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
注意:在生产环境中终止会话前,请确保了解其影响。