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;
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
