Annulation
| 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 :
- extension expirée ;
- extension libre ;
- extension expirée d'un autre segment d'annulation ;
- extension d'un fichier d'annulation ;
- extension d'un segment non expiré, si le segment n'est pas garanti par la période de rétention ;
- 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
- Oracle
- Essentiel oracle
- Alter — syntaxe
ALTER SYSTEM/ALTER TABLESPACE