Rman progress
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Vues source | gv$session, gv$session_longops, gv$instance
|
| Voir aussi | RMAN · Rac instances |
Rman progress affiche l'avancement en temps réel des opérations RMAN en cours (backup, restore, recover) : pourcentage effectué, durée écoulée, temps restant estimé, heure de fin prévisionnelle. S'appuie sur v$session_longops, la vue générique Oracle de suivi des opérations longues, filtrée sur les sessions dont le programme commence par rman.
Utilise les vues gv$* (plutôt que v$*) afin de couvrir toutes les instances d'un cluster RAC en une seule requête — sur une base standalone, cela reste sans effet (une seule instance remontée).
Script
SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT RPAD(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON
PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Rapport : Avancement des opérations RMAN en cours |
PROMPT | Instance : ¤t_instance |
PROMPT +------------------------------------------------------------------------+
SET ECHO OFF
SET FEEDBACK 6
SET HEADING ON
SET LINESIZE 180
SET PAGESIZE 50000
SET VERIFY OFF
CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
COLUMN instance_name FORMAT a10 HEADING 'Instance'
COLUMN sid HEADING 'Oracle|SID'
COLUMN serial_num HEADING 'Serial|#'
COLUMN opname FORMAT a30 HEADING 'Opération|RMAN'
COLUMN start_time FORMAT a18 HEADING 'Début'
COLUMN totalwork HEADING 'Travail|total'
COLUMN sofar HEADING 'Fait'
COLUMN pct_done HEADING 'Pourcent|fait'
COLUMN elapsed_seconds HEADING 'Écoulé|(s)'
COLUMN time_remaining HEADING 'Restant|(s)'
COLUMN done_at FORMAT a18 HEADING 'Fin|estimée'
SELECT
i.instance_name instance_name
, sid sid
, serial# serial_num
, b.opname opname
, TO_CHAR(b.start_time, 'mm/dd/yy HH24:MI:SS') start_time
, b.totalwork totalwork
, b.sofar sofar
, ROUND((b.sofar / DECODE(b.totalwork, 0, 0.001, b.totalwork) * 100), 2) pct_done
, b.elapsed_seconds elapsed_seconds
, b.time_remaining time_remaining
, DECODE(b.time_remaining
, 0, TO_CHAR((b.start_time + b.elapsed_seconds / 3600 / 24), 'mm/dd/yy HH24:MI:SS')
, TO_CHAR((SYSDATE + b.time_remaining / 3600 / 24), 'mm/dd/yy HH24:MI:SS')
) done_at
FROM
gv$session a
JOIN gv$session_longops b USING (sid, serial#)
JOIN gv$instance i ON (i.inst_id = a.inst_id AND i.inst_id = b.inst_id)
WHERE
a.program LIKE 'rman%'
AND b.opname LIKE 'RMAN%'
AND b.opname NOT LIKE '%aggregate%'
AND b.totalwork > 0
ORDER BY
i.instance_name
, b.start_time;
Une opération RMAN qui n'apparaît dans aucune ligne de résultat malgré une session active est généralement une opération trop rapide pour être suivie via session_longops (le seuil interne Oracle est d'environ 6 secondes) — pas une anomalie du script.
Voir aussi
- RMAN — présentation générale de l'outil
- Rac instances — équivalent pour l'état général des instances d'un cluster RAC
- Rman backup sets — état des sauvegardes une fois terminées