Optymalizując aplikację na bazie danych, często potrzebne jest sprawdzenie jakie operacje wykonuje konkretny proces systemu operacyjnego. Wystarczy wykonać następujący select:
select s.USERNAME, st.hash_value, st.sql_text
from v$sqltext_with_newlines st, v$session s, v$process p
where st.address = hextoraw(s.sql_address)
and st.hash_value = s.sql_hash_value
and p.ADDR = s.PADDR
and p.SPID = :id_procesu
order by st.hash_value, st.piece
Zakładanie indeksów i inne długotrwałe operacje irytują brakiem paska postępu ;) Na szczęście wystarczy wykonać poniższe zapytanie, żeby zobaczyć ile nam jeszcze zostało do końca:
select l.opname,
trunc(l.elapsed_seconds/60,2) “minuts from start”,
trunc(l.time_remaining/60,2) “minuts to end”,
l.sofar,
l.totalwork,
trunc(100*l.sofar/l.totalwork,2) “%”
from V$SESSION_LONGOPS l
where l.sid = :sid
and l.serial# = :serial#
and l.time_remaining > 0
Wartości parametrów sid i serial wyciągamy z tabeli v$session dla interesującej nas sesji.
Oczywiście wszytko to można uzyskać przy użyciu Oracle Enterprise Managera, ale po co strzelać z armaty do wróbla ;)