Fra Oracle 9i kom der nogen nye tiltag hvad angår Rollback, kaldet UNDO tablespaces. Indtil da havede mange af os, fornøjelsen dagligt med oprettelse, vedligehold samt monitorering af rollback segmenter. Fra 9i hed det vel heller ikke rollback segmenter længere med derimod manual undo management mode, forkortet (MUM).

Som du sikkert ved er ideen med rollback og fra 9i UNDO blokke i Oracle, at være istand til at lave rollback på transaktioner samt sikre read consistency. Omvendt MUM er UNDO tablespaces det vi kalder Automatic undo management mode, forkortet AUM, og forskellen mellem MUM og AUM, er at tilligere vedligehold, monitorering m.v. foregår automatisk.

For at benytte Automatic UNDO management, gøres følgende:

  1. Opret et Undo tablespace:
    CREATE UNDO TABLESPACE undo_tbs 
    DATAFILE /mount_point/UNDO/$ORACLE_SID/undo_tbs01.dbf SIZE xxM 
    EXTENT MANAGEMENT LOCAL;
    
  2. Modificer følgende parametre:
    ALTER SYSTEM SET undo_tablespace=UNDO_TBS SCOPE=spfile;
    ALTER SYSTEM SET undo_retention=xxxx SCOPE=spfile;
    ALTER SYSTEM SET undo_management=AUTO SCOPE=spfile;
    
  3. Lav en shutdown af instansen, og start den igen.
  4. Slet gamle rollback segmenter og tilhørende tablespaces. Vær opmærksom på ikke at droppe SYSTEMs rollback segment.

Det du nu skal beslutte er, hvad der er en optimal size for dit UNDO tablespace. En del af denne er baseret på undo_retention parameteren, hvor den anden del er UNDO_BLOCKS samt BLOCK_SIZE. 

Der kan stadig forespørges mod traditionelle views som DBA_ROLLBACK_SEGS, V$ROLLSTAT, V$ROLLNAME, samt V$TRANSACTION. Følgende views benyttes for at monitorere UNDO:

DBA_UNDO_EXTENTS - viser hvornår hvert extent i UNDO tablespacet blev commited.

V$UNDOSTAT - Viser forbrug over sidste 24 timer. Hver række viser et 10 minutters interval defineret af START_TIME samt END_TIME. Nøglefeltet her er UNDO_BLOCKS.

Note Du kan nogenlunde fastsætte størrelsen på dit UNDO ved at benytte følgende formel:

UNDO TS SIZE = UNDO_RETENTION * UNDO_BLOCKS * BLOCK_SIZE.