查詢當前執行的SQL,鎖表與解鎖
一:查詢當前正在執行的SQL:
SELECT a.sid, a.serial#, a.machine, a.username, b.hash_value, c.sql_text
FROM v$session a, v$sqlarea b, v$sqltext c
WHERE a.sql_hash_value = b.hash_value
AND b.hash_value = c.hash_value
ORDER BY b.hash_value, c.piece;
查詢結果如下所示:
二:檢視當前鎖表資訊:
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
l.os_user_name,
s.machine,
s.terminal,
o.object_name,
s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
查詢結果如下所示:
此鎖的原因是我使用了select ... for update;此鎖為三級鎖,可以看出是CIRC_PERIOD表鎖住了。
三:解鎖:
根據上面查詢出來的SID和SERIAL#來KILL SESSION,SQL如下:
alter system kill session 'SID,SERIAL#';
也可以根據如下SQL查詢出KILL語句:
SELECT 'alter system kill session ''' || l.session_id || ',' || s.serial# || ''';'
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
查詢結果如下所示: