锁表查询及处理

锁表及查询及kill命令生成语句

SELECT b.sid,
       b.serial#,
       b.logon_time,
       b.username,
       b.osuser,
       a.object_name,
       'alter system kill session ''' || b.sid || ',' || b.serial# || ''';' AS kill
  FROM (SELECT s.*, t.object_name
          FROM v$locked_object s, dba_objects t
         WHERE s.object_id = t.object_id) a
  LEFT OUTER JOIN v$session b
    ON a.session_id = b.sid
 ORDER BY b.logon_time, b.sid;

根据SID查询当前在执行的SQL语句

SELECT sql_text
  FROM v$sqlarea
 WHERE (hash_value, address) =
       (SELECT sql_hash_value, sql_address FROM v$session WHERE SID = &SID);

根据SID查询查询已经执行过的SQL语句

SELECT sql_text
  FROM v$sqlarea a, v$session b
 WHERE a.SQL_ID = b.PREV_SQL_ID
   AND b.SID = &SID;

互锁查询

SELECT DECODE(request, 0, 'Holder: ', 'Waiter: ') || sid sess,
       id1,
       id2,
       lmode,
       request,
       TYPE
  FROM V$LOCK
 WHERE (id1, id2, TYPE) IN
       (SELECT id1, id2, TYPE FROM V$LOCK WHERE request > 0)
 ORDER BY id1, request;

---------------------------------------------------------------------------

SELECT blkingsess.sid blockingsid, blkedsess.sid blockedsid
  FROM v$lock blkingsess,
       (SELECT * FROM v$lock WHERE request != 0) blkedsess
 WHERE blkingsess.id1 = blkedsess.id1
   AND blkingsess.id2 = blkedsess.id2
   AND blkingsess.sid != blkedsess.sid;

---------------------------------------------------------------------------

SELECT s.sql_id, s.sql_text, v.sid, v.machine
  FROM v$sql S, v$session V
 WHERE s.address = v.sql_address
   AND v.sid IN (SELECT blkedsess.sid blockedsid
                   FROM v$lock blkingsess,
                        (SELECT * FROM v$lock WHERE request != 0) blkedsess
                  WHERE blkingsess.id1 = blkedsess.id1
                    AND blkingsess.id2 = blkedsess.id2
                    AND blkingsess.sid != blkedsess.sid)
UNION
SELECT s.sql_id, s.sql_text, v.sid, v.machine
  FROM v$sql S, v$session V
 WHERE s.address = v.sql_address
   AND v.sid IN (SELECT blkingsess.sid blockingsid
                   FROM v$lock blkingsess,
                        (SELECT * FROM v$lock WHERE request != 0) blkedsess
                  WHERE blkingsess.id1 = blkedsess.id1
                    AND blkingsess.id2 = blkedsess.id2
                    AND blkingsess.sid != blkedsess.sid);

你可能感兴趣的:(#,Oracle,数据库,oracle)