Deferred Segment Creation

E' un parametro introdotto dalla versione oracle 11gr2.

Di default è valorizzato a true e consiste nel creare la tabella solo quando viene effettuata la prima insert.


SQL>
show parameter deferred_segment_creation

NAME                                    TYPE                   VALUE
------------------------- ------- --------------------------------
deferred_segment_creation    boolean         TRUE


Creiamo la tabella vuota TEST_DEF ed eseguiamo le seguenti query:

SQL> select segment_name from USER_SEGMENTS where segment_name= 'TEST_DEF' ;                                                           
0 row selected

SQl> select segment_created from USER_TABLES where table_name= 'TEST_DEF' ;
SEGMENT_CREATED
-----------------------------------
NO

Nel momento che effettuo una insert, seguita da commit o rollback, viene occupato il segment da associare alla tabella.

SQL> insert into TEST_DEF values (101);

SQL> select segment_name from USER_SEGMENTS where segment_name= 'TEST_DEF' ;
SEGMENT_NAME
-------------------------
TEST_DEF

SQl> select segment_created from USER_TABLES where table_name= 'TEST_DEF' ;
SEGMENT_CREATED
---------------------------
YES

Vantaggio: se un applicazione effettua molte create table ma non li popola, non occupo inutilmente dei segments.


E' possibile creare direttamente il segment in fase di creazione della tabella usando la seguente clausola:

SQL> CREATE TABLE test_def2 (x number) SEGMENT CREATION IMMEDIATE;

SQL> select segment_name from user_segments where segment_name= 'TEST_DEF2' ;
SEGMENT_NAME
-------------------------
TEST_DEF2

SQl> select segment_created from USER_TABLES where table_name= 'TEST_DEF2' ;
SEGMENT_CREATED
---------------------------
YES



Invece di usare la clausola precedente è possibile disabilitarlo a livelllo di sessione o di sistema

SQL> alter session set DEFERRED_SEGMENT_CREATION=false;

SQL> alter system set DEFERRED_SEGMENT_CREATION=false;

Ci sono comunque dei limiti nell'utilizzo di questo parametro. 
Ad esempio non funziona se si creano tabelle e indici partizionati.
Per altre restrizioni guardare la documentazione ufficiale.

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