Undo segments
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic (Undo) |
| Voir aussi | Undo contention · Undo users |
Undo segments détaille chaque segment d'annulation actif : tablespace, extents initiaux/suivants, min/max extents, statut, taille occupée, nombre d'extents, ainsi que les compteurs de wraps (le segment a bouclé sur lui-même) et shrinks (le segment s'est réduit à sa taille optimale). Une somme par instance est calculée en pied de rapport. Le script interroge les vues GV$ et fonctionne aussi bien sur une instance unique qu'en RAC.
Utile pour dimensionner l'UNDO tablespace : des wraps fréquents combinés à des erreurs ORA-01555 (snapshot too old) indiquent un UNDO_RETENTION ou une taille de tablespace insuffisants pour la charge de rétention souhaitée.
Correction apportée : la jointure d'origine reliait dba_rollback_segs à dba_segments sur le seul nom de segment (segment_name), sans tenir compte du propriétaire (owner) — un risque de doublons en cas d'homonymie entre schémas. La jointure ci-dessous ajoute la condition sur owner.
Script
-- Détail des segments UNDO actifs : taille, wraps, shrinks, optimal size (RAC-compatible)
SET LINESIZE 180
SET PAGESIZE 50000
SET VERIFY OFF
COLUMN instance_name FORMAT a9 HEADING 'Instance'
COLUMN undo_name FORMAT a30 HEADING 'Undo Name'
COLUMN tablespace FORMAT a11 HEADING 'Tablespace'
COLUMN in_extents FORMAT a23 HEADING 'Init / Next Extents'
COLUMN m_extents FORMAT a23 HEADING 'Min / Max Extents'
COLUMN status FORMAT a8 HEADING 'Status'
COLUMN wraps FORMAT 99,999 HEADING 'Wraps'
COLUMN shrinks FORMAT 99,999 HEADING 'Shrinks'
COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size'
COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes'
COLUMN extents FORMAT 999 HEADING 'Extents'
BREAK ON instance_name SKIP 2
COMPUTE SUM LABEL 'Total: ' OF bytes ON instance_name
SELECT
i.instance_name instance_name
, a.owner || '.' || a.segment_name undo_name
, a.tablespace_name tablespace
, TRIM(TO_CHAR(a.initial_extent, '999,999,999,999')) || ' / ' ||
TRIM(TO_CHAR(a.next_extent, '999,999,999,999')) in_extents
, TRIM(TO_CHAR(a.min_extents, '999,999,999,999')) || ' / ' ||
TRIM(TO_CHAR(a.max_extents, '999,999,999,999')) m_extents
, a.status status
, b.bytes bytes
, b.extents extents
, d.shrinks shrinks
, d.wraps wraps
, d.optsize opt
FROM
gv$instance i
INNER JOIN gv$rollstat d ON (i.inst_id = d.inst_id)
INNER JOIN sys.undo$ c ON (d.usn = c.us#)
INNER JOIN dba_rollback_segs a ON (a.segment_name = c.name)
INNER JOIN dba_segments b ON (a.segment_name = b.segment_name
AND a.owner = b.owner)
ORDER BY
i.instance_name
, a.segment_name;
Voir aussi
- Undo contention — mesurer la contention induite par un sous-dimensionnement
- Undo users — sessions consommant actuellement ces segments