Con esta query podemos ver los usuarios conectados, la sentencia SQL que están ejecutando, la hora en que han hecho login, el programa usado,...
SELECT
SQL_TEXT, --Sentencia SQL
USERNAME, --Nombre usuario
SCHEMANAME, --Nombre Eschema
OSUSER, --Usuario del SO
LOGON_TIME, --Hora de Login de esta sesión
STATUS, --INACTIVE o ACTIVE
MACHINE, --La maquina en la que se abre la sesión
PROGRAM --Programa usado, SQLTools.exe, TOAD.exe
FROM
SYS.V_$SESSION S, SYS.V_$SQLAREA A WHERE A.HASH_VALUE=S.SQL_HASH_VALUE
ORDER BY LOGON_TIME DESC;
Y con la siguiente query podemos ver la previsión del tiempo restante para las sentencias
que llevan cierto tiempo en ejecución:
Veremos el usuario, la sentencia, el % que lleva completado, el tiempo que lleva y la hora prevista de fin.
SELECT S.OSUSER, --Usuario de SO
S.USERNAME, --Usuario
A.SQL_TEXT, --Query
SL.OPNAME, --Operación que esta realizando (Table Scan, Sort/Merge,..)
trunc((SL.SOFAR*100)/SL.TOTALWORK,2) AS EVOL, --Evolución en %
SL.SOFAR, --Tiempo que lleva
SL.TOTALWORK, --Tiempo total
To_Char(SYSDATE, 'dd/mm/yyyy HH24:MI:SS') AS T_NOW, --Ahora. Día y hora actual.
To_Char(SYSDATE+((((1/24)/60)/60)*SL.TIME_REMAINING), 'dd/mm/yyyy HH24:MI:SS') AS T_STOP --Día y hora cuando acabará.
FROM
V$SESSION_LONGOPS SL, V$SESSION S ,V$SQLAREA A
WHERE
SL.SOFAR <> SL.TOTALWORK AND
SL.SID = S.SID AND
A.HASH_VALUE=S.SQL_HASH_VALUE;
Hay que tener en cuenta que según de que sentencia se trate, puede tener varias operaciones, con lo cual veremos que va del 0 al 100% varias veces. Es decir, no podemos asegurar de immediato lo que va a tardar, pero si que nos puede dar una idea aproximada.
Muchas veces nos basta con saber si se trata de una prevision de segundos, minutos, horas...
