Pular para o conteúdo

V$SESSION_LONGOPS

No Oracle 8.0, a View V$SESSION_LONGOPS foi criada para permitir que certos processos dêem alguma dica sobre quanto tempo irá durar o trabalho que estão fazendo. Os backups em RMAN eram os principais motivos para a criação desta View.

No Oracle 8i, a V$SESSION_LONGOPS foi expandida para incluir:
Rman Backup and Restore
Parallel Query
Recovery
Full Table Scans (válido apenas para tabelas com mais de 10.000 blocos formatados)
Sorting

Tenha em mente que só aparecem nesta View operações únicas, como um Full Table Scan. SELECTs que utilizam índices, por maiores que sejam, são várias pequenas operações (consulta ao índice, consulta a tabela, consulta o índice de novo, consulta a tabela de novo…), e não irão aparecer nesta View.

Ela tem sido mais útil para mim quando o cliente pergunta “Quanto falta para este backup terminar?”

SELECT SID,SERIAL#,START_TIME,((SOFAR/TOTALWORK)*100),'%',MESSAGE FROM V$SESSION_LONGOPS where TIME_REMAINING > 0 ORDER BY TIME_REMAINING;

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 0 / 5. Contagem de votos: 0

Sem votos ! Seja o primeiro a classificar !

2 comentários em “V$SESSION_LONGOPS”

  1. Avatar de David (Drbs)

    Verdade Portilho, eu usei muito , segue minha contribuição em forma de script :

    RAC:
    clear col
    clear computes
    clear breaks
    clear buffer

    SET LINESIZE 200
    COLUMN sid FORMAT 9999
    COLUMN serial# FORMAT 9999999
    COLUMN machine FORMAT A30
    COLUMN progress_pct FORMAT 99999999.00
    column username for a15
    COLUMN elapsed FORMAT A10
    COLUMN remaining FORMAT A10
    COlumn Logon for a15
    col module for a20
    Column status for a10

    SELECT distinct(s.inst_id),
    s.sid,
    s.serial#,
    p.spid,
    s.status,
    to_char(s.logon_time,’dd/mm/yy hh24:mi’) as Logon,
    s.username,
    s.module,
    ROUND(sl.elapsed_seconds/60) || ‘:’ || MOD(sl.elapsed_seconds,60) elapsed,
    ROUND(sl.time_remaining/60) || ‘:’ || MOD(sl.time_remaining,60) remaining,
    ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct
    FROM gv$session s,
    gv$session_longops sl,
    gv$process p
    WHERE s.sid = sl.sid
    AND s.inst_id = sl.inst_id
    AND s.serial# = sl.serial#
    AND p.pid = s.sid
    order by logon desc;

    Single Instance:

    set line 200;
    set pagesize 30;
    set head on;

    col username format a15 heading Usuario;
    col sid format 9999 heading Sid;
    col serial# format a5;
    col username format a7 heading “Usuario”;
    col osuser format a10 heading “Op.User”;
    col terminal format a10 heading “Maquina”;
    col opname format a20 heading “Operação”;
    col %Completo format 99999;
    col message format a50 heading “Mensagen”;
    col Inicio for a10

    break on username on osuser on terminal on Serial on Sid;
    prompt “::::::::::::::::::::::::::::::::::::::::::::::::::::::”
    prompt
    accept a prompt “.. Entre com o Usuario…:”
    accept id prompt “…. Entre com o Id do Usuario..:”
    prompt
    prompt “::::::::::::::::::::::::::::::::::::::::::::::::::::::”

    select a.sid ,
    a.serial# “Serial”,
    a.username,
    a.osuser,
    a.terminal,
    b.opname,
    to_char(b.start_time,’HH24:MI:SS’) “Inicio”,
    (b.sofar/b.totalwork)*100 “%Completo”,
    b.message
    from v$session a,
    v$session_longops b
    where a.serial#=b.serial#
    and a.sid(+)=b.sid
    and a.username like upper(nvl(‘%&a%’,a.USERNAME))
    and a.sid in (nvl(&id,a.sid))
    and (b.sofar/b.totalwork)*100

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress