Содержание

SQL

Отобразить выполнявшиеся запросы и частоту их выполнения

select count(*) count
      ,a.user_name username
      , b.sql_text sql_text
from v$open_cursor a
   , v$sqlarea b 
where a.address = b.address 
group by a.user_name
       , b.sql_text
having count(*) > 1 order by count(*) desc;

Запросы выполняемые в данный момент

select status
      , machine
      , osuser
      , username
      , a.sql_text
from v$session s
   , v$open_cursor o
   , v$sqlarea a
where s.saddr=o.saddr
  and s.sid=o.sid
  and o.address=a.address
  and o.hash_value=a.hash_value
  and user_name = 'USERNAME';

Длительные запросы

Длительные запросы, выполняемые в данный момент в определённой сессии. Нижеприведённый код выводит информацию о действии, выполненном объёме, общем объёме, проценте выполнения, единицах, времени, прошедшем с момента старта, и об оставшемся времени выполнения.

SELECT  decode(
          target_desc
          ,NULL
          ,decode(target,NULL,opname, concat(opname, concat (' - ',target))) 
          ,decode(target,NULL,concat(opname, concat (' : ',target_desc)) 
          ,concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) action
          ,sofar
          ,totalwork
          ,round(sofar*100/totalwork,2) percent
          ,units
          ,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (elapsed_seconds, 'second'),'hh24:mi:ss') elapsed_time
          ,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (time_remaining, 'second'),'hh24:mi:ss') time_remaining
FROM v$session_longops 
WHERE sid = 492 AND serial# = 2611;

то же, но для активных сессий:

SELECT  decode(
          target_desc
          ,NULL
          ,decode(target,NULL,opname, concat(opname, concat (' - ',target))) 
          ,decode(target,NULL,concat(opname, concat (' : ',target_desc)) 
          ,concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) action
          ,sofar
          ,totalwork
          ,round(sofar*100/totalwork,2) percent
          ,units
          ,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (elapsed_seconds, 'second'),'hh24:mi:ss') elapsed_time
          ,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (time_remaining, 'second'),'hh24:mi:ss') time_remaining
FROM v$session_longops 
WHERE (sid,serial#) in (select sid,serial# from v$session where status='ACTIVE');

Кто использует UNDO?

SELECT  s.sid, s.serial#, s.username, t.used_urec, t.used_ublk
FROM v$session s, v$transaction t
WHERE s.saddr = t.ses_addr
ORDER BY t.used_ublk DESC;