← Monitoring
Oracle · Monitoring
How to check long-running operations in Oracle
Show currently running long operations in Oracle from V$SESSION_LONGOPS with elapsed, remaining, and percentage progress.
Tested on11g12c18c19c21c23ai26ai
V$SESSION_LONGOPS tracks any operation Oracle expects to run longer than six seconds — think RMAN backups, big DML, index rebuilds, statistics gather. Two views below: a compact SID / serial / progress table, and an enriched version with username, start time, and the OPNAME message.
-- Compact view: SID, elapsed, remaining, progress
COLUMN sid FORMAT 999
COLUMN serial# FORMAT 9999999
COLUMN machine FORMAT a30
COLUMN progress_pct FORMAT 99999999.00
COLUMN elapsed FORMAT a10
COLUMN remaining FORMAT a10
SELECT s.sid,
s.serial#,
s.machine,
ROUND(sl.elapsed_seconds / 60) || ':' || MOD(sl.elapsed_seconds, 60) AS elapsed,
ROUND(sl.time_remaining / 60) || ':' || MOD(sl.time_remaining, 60) AS remaining,
ROUND(sl.sofar / sl.totalwork * 100, 2) AS progress_pct
FROM v$session s,
v$session_longops sl
WHERE s.sid = sl.sid
AND s.serial# = sl.serial#;
-- Enriched view: with username, start / last-update timestamps, and the OPNAME message
ALTER SESSION SET nls_date_format = 'DD-MON-YY HH24:MI:SS';
SET LINES 200
COL sid FORMAT 9999
COL serial# FORMAT 9999999
COL username FORMAT a10
COL remaining FORMAT a9
COL message FORMAT a80
SELECT sid, serial#, username,
start_time,
last_update_time,
TO_CHAR(TRUNC(SYSDATE) + (time_remaining / 24 / 60 / 60), 'HH24:MI:SS') AS remaining,
TO_CHAR(TRUNC(SYSDATE) + (elapsed_seconds / 24 / 60 / 60), 'HH24:MI:SS') AS elapsed,
ROUND(sofar / totalwork, 2) * 100 AS pct_progress,
message
FROM v$session_longops
WHERE totalwork > sofar;monitoringlongopsv$session_longops