Segment Shrink

Consiste nel recuperare spazio sopra e sotto l'hwm (high-water mark), liberando spazio e resettando il valore di hwm.
Poiché vengono mosse le righe e cambiano i ROWIDs occorre abilitare la tabella alla modalità row movement e il tablespace di appartenenza deve eesere gestito in modalità ASSM (automatic segment space management).

SQL > alter table .... enable row movement;

Inoltre occorre disabilitare trigger, dml e query basati sul rowid.
Può essere eseguita on line pertanto durante lo shrink vengono bloccate le dml che operano su quei segmenti mentre gli indici risultano utilizzabili.

Può essere usato per i seguenti oggetti.
- Heap tables
- Index-organized tables and their overflow segments
- LOBs and LOB segments
- Materialized views and materialized view logs
- Indexes
- Partitions and subpartitions


select SEGMENT_NAME, BLOCKS ,bytes
 from dba_segments
where segment_type='TABLE'
and  TABLESPACE_NAME= 'TS_PEPT_DATA'
and segment_name = 'DOPO_SNAPSHOT'

SEGMENT_NAME    BLOCKS      BYTES
---------- -------------------------------------------------
DOPO_SNAPSHOT     8                 65536

Eseguo diverse insert e delete e ottengo.

SEGMENT_NAME    BLOCKS     BYTES
---------- ----------------------------------------------------------
DOPO_SNAPSHOT    56                458752


select * from dba_extents where owner ='PEPT' and segment_name = 'DOPO_SNAPSHOT'



SQL> alter table pept.DOPO_SNAPSHOT enable row movement;

SQL> alter table  pept.DOPO_SNAPSHOT SHRINK SPACE;

Rieseguendo la prima query ottengo:

SEGMENT_NAME    BLOCKS      BYTES
---------- -----------------------------------------------------------
DOPO_SNAPSHOT     16                 131072

Mentre la seconda query restituisce questo.




SQL> alter table pept.DOPO_SNAPSHOT SHRINK SPACE COMPACT;

La clausola COMPACT deframmenta e compatta i blocchi della tabella ma non resetta l'HWM o libera spazio.

SQL> alter table pept.DOPO_SNAPSHOT SHRINK SPACE CASCADE;

La clausola CASCADE invece applica lo shrink segment a tutti gli oggetti collegati alla tabella. Nel caso di tabella partizionata non è necessario applicare la suddetta clausola perché viene eseguito di default lo shrimk segment alle partizioni.



Da Enterprise Manager 12 andare sotto Amministrazione > Memoria > Segment Advisor





Cliccare su Advisor Central


Cliccare su Segment Advisor


Selezionare oggetti dello schema


Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database