Rman progress

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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  : &current_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