1. 程式人生 > >查詢當前執行的SQL,鎖表與解鎖

查詢當前執行的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#;

查詢結果如下所示: