Quanto tempo falta para acabar?
May 10, 2011

Sempre quando ouço “Quanto tempo falta para …” já penso na view v$session_longops.

De acordo com a documentação da Oracle essa view mostra o estado de várias operações (Rman Backup/Restore, Parallel Query, Recovery, Full table scans, Sorting) que executam por mais de 6 segundos, com isso permite estimar um tempo de finalização da operação.

column sid format a10 heading 'Sid/Serial'
column operacao format a11 heading 'Operação'
column objeto format a35 heading 'Objeto'
column executado format 99999999 heading 'BLK|Lidos'
column total format 99999999 heading 'BLK|Total'
column pct format 990.90 heading 'PCT(%)'
column inicio format a11 heading 'Dt Start'
column decorrido format a11 heading 'Decorrido|DD:HH:MI:SS'
column restante format a11 heading 'Restante|DD:HH:MI:SS'
column unidade format a3 heading 'Uni'

select
to_char(sid) || ',' || ltrim(to_char(serial#)) sid,
decode(opname,
'Hash Join', 'Hash Join',
'Index Fast Full Scan', 'Index Scan',
'Sort Output', 'Sort Output',
'Sort/Merge', 'Sort Merge',
'Table Scan', 'Table Scan',
'-') operacao,
target objeto,
sofar executado,
totalwork total,
trunc((sofar/totalwork)*100,2) pct,
to_char(start_time, 'DD/MM HH24:MI') inicio,
trunc(elapsed_seconds/86400)|| ':'
|| to_char(to_date(mod(elapsed_seconds,86400), 'SSSSS'), 'HH24:MI:SS') decorrido,
trunc(time_remaining/86400)|| ':'
|| to_char(to_date(mod(time_remaining,86400), 'SSSSS'), 'HH24:MI:SS') restante,
decode(units,'Blocks','Blk','-') unidade
from v$session_longops
where time_remaining > 0
and sid = &SID;
Quanto tempo vai demorar o backup?
May 10, 2011

Uma das formas para descobrir quanto tempo ainda falta para terminar o backup realizado com RMAN, é consultando a viewv$session_longops.

Essa view mostra as vários operações que estão executando por mais de 6 segundos no banco de dados Oracle.

Veja os passos abaixos:

Primeiro vamos relacionar o processo servidor com o channel do RMAN, através do comando SET COMMAND ID

RMAN> run {
2> allocate channel t1 type disk;
3> set command id to ‘rman’;
4> backup datafile 1;
5> release channel t1;
6> }

Agora, basta executar a query, vendo o resultado.

SYS@orcl> SELECT sid, serial#, sofar, totalwork,
2      round(sofar/totalwork*100,2) "% Complete"
3 FROM v$session_longops
4 WHERE opname LIKE 'RMAN:%'
5 AND opname NOT LIKE 'RMAN: aggregate%'
6 AND totalwork != 0;

SID        SERIAL#     SOFAR      TOTALWORK   % Complete
---------- ---------- ---------- ---------- ----------
139          17        13951       62720       22.24

SYS@orcl> /

SID         SERIAL#    SOFAR     TOTALWORK  % Complete
---------- ---------- ---------- ---------- ----------
139          17        24831       62720       39.59

SYS@orcl> /

SID         SERIAL#    SOFAR     TOTALWORK  % Complete
---------- ---------- ---------- ---------- ----------
139          17        62591       62720        99.79