Annulation

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Concept / structure Oracle
Rôle Undo (annulation) : rollback, lecture cohérente, flashback
Voir aussi Oracle · Essentiel oracle · Alter

Les segments d'annulation (undo) sont utilisés par Oracle pour :

  • le ROLLBACK des transactions (Automatic Undo Management, AUM) ;
  • la lecture cohérente (consistent read) ;
  • certaines fonctionnalités de flashback ;
  • la récupération de la base de données (RECOVER).

La durée de rétention des données d'annulation dépend du paramètre UNDO_RETENTION.

Oracle prend les extensions d'annulation dans l'ordre suivant :

  1. extension expirée ;
  2. extension libre ;
  3. extension expirée d'un autre segment d'annulation ;
  4. extension d'un fichier d'annulation ;
  5. extension d'un segment non expiré, si le segment n'est pas garanti par la période de rétention ;
  6. extension d'un segment non expiré d'un autre segment d'annulation, même condition.

Utilisation

Pour activer la gestion automatique :

UNDO_MANAGEMENT = AUTO
UNDO_TABLESPACE
UNDO_RETENTION = 900   -- 15 minutes
V$UNDOSTAT > TUNED_UNDORETENTION

La gestion des extensions du tablespace d'annulation est obligatoirement locale.

CREATE [BIGFILE | SMALLFILE] UNDO TABLESPACE nom DATAFILE spec_fichier [,...]
  [RETENTION GUARANTEE | NOGUARANTEE] [BLOCKSIZE valeur[K]];

Changement du tablespace d'annulation actif (bascule ONLINE/OFFLINE de l'ancien tablespace) :

> ALTER SYSTEM SET UNDO_TABLESPACE = nom [clause_SCOPE];

Si une transaction est en cours sur l'ancien tablespace, la désactivation reste en attente (« pending offline »).

V$ROLLSTAT

Modification du mode de rétention :

ALTER TABLESPACE nom RETENTION GUARANTEE | NOGUARANTEE;

Suppression :

DROP TABLESPACE nom INCLUDING CONTENTS AND DATAFILES;

Informations

Sur les tablespaces :

DBA_TABLESPACES  -  V$TABLESPACE
DBA_DATA_FILES   -  V$DATAFILE
DBA_FREE_SPACE
DBA_SEGMENTS
DBA_EXTENTS
DBA_UNDO_EXTENTS

Sur les segments d'annulation :

DBA_ROLLBACK_SEGS
V$ROLLNAME
V$ROLLSTAT   -- utile pour la supervision

Sur l'activité d'annulation et les transactions :

V$UNDOSTAT

Dimensionner le tablespace d'annulation

Formule générale : V$UNDOSTAT, DR × QAS où :

  • DR = durée de rétention ;
  • QAS = quantité d'espace d'annulation générée par seconde.

La valeur DR s'estime via la colonne TUNED_UNDORETENTION de V$UNDOSTAT — il faut s'assurer qu'elle reste supérieure à MAXQUERYLEN, et positionner UNDO_RETENTION en conséquence.

La valeur QAS s'estime via la colonne UNDOBLKS de V$UNDOSTAT, qui donne le nombre de blocs d'annulation utilisés sur chaque période (10 minutes par défaut).

SELECT
TO_CHAR(begin_time, 'DD/MM HH24:MI') begin_time,
TO_CHAR(end_time,'DD/MM HH24:MI') end_time,
undoblocks,
maxquerylen,
tuned_undoretention
FROM v$undostat;
SELECT MAX(undoblks), MAX(tuned_undoretention) FROM v$undostat;

Soit : taille de bloc (8 Ko en général) × MAX(undoblks) × MAX(tuned_undoretention) + marge 10-20 % = taille recommandée du tablespace d'annulation.

Voir aussi