Bu parameter oracle 11.2 versiyonu ile tanıştığımız bir parametre, tablonun ilk create edildiği anda (null olarak tabi) ona default olarak bir block atanıp atanmayacağının set edildiği parametredir. Parametre TRUE ve FALSE olmak üzere 2 farklı değer alabilir. Defaultta FALSE olarak geliyor.
Sırayla TRUE veya FALSE olması durumunda bizi nelerin beklediğine bir bakalım ;
Parametrenin şu anki değerini check ederek başlayalım ;
| 1 2 3 4 5 6 7 8 | COLUMN name format a30 COLUMN value format a10 select name, value  from v$parameter where name like '%deferred_segment_creation%' NAME                           VALUE      ------------------------------ ---------- deferred_segment_creation      TRUE 1 row selected. | 
Boş bir test tablosu oluşturup stucture’ ını kontrol edelim ;
| 1 2 | create table kamil.test10 as select * from dba_tables  where 1=2 Table created. | 
Dba_tables view’ inde görebiliyormuyuz kontrol edelim ;
| 1 2 3 4 5 6 7 8 | COLUMN owner format a10 COLUMN table_name format a10 select owner, table_name,segment_created, initial_extent, blocks  from dba_tables where table_name = 'TEST10' OWNER  	TABLE_NAME   SEGMENT_CREATED   INITIAL_EXTENT     BLOCKS ------ 	----------   --------------    -------------- 	  ---------- KAMIL   TEST10       NO                			           0 1 row selected. | 
Burada dikkat ederseniz segment_created NO yani tablonun create edilme aşamasında hiçbir segment assign edilmemiş durumda, blocks alanında da bu yüzden 0 olarak görüyoruz. Bu yüzdendirki aşağıdaki viewlerde henüz tablomuza ait bir iz yok.
| 1 2 3 4 5 6 7 8 9 | COLUMN owner format a10 COLUMN segment_name format a10 select owner, segment_name, blocks  from dba_extents where segment_name = 'TEST10' no rows selected. COLUMN owner format a10 COLUMN segment_name format a10 select owner, segment_name  from dba_segments where segment_name = 'TEST10' no rows selected. | 
Bu değerin TRUE olması demek aslında tablonun create scriptinin syntax’ ında SEGMENT CREATION DEFERRED parametresinin olması anlamına gelir. Bunun syntax’ i da aslında arka tarafda aşağıdaki gibidir ;
| 1 | create table kamil.test10 SEGMENT CREATION DEFERRED as select * from dba_tables  where 1=2; | 
Yani bu parametreyi TRUE olarak tablo create etmek ile SEGMENT CREATION DEFERRED parametresini kullanarak create etmek arasında fark bulunmamaktadır.
Şimdi bu değerin FALSE olması durumunda neler olduğuna bakalım ;
| 1 2 | alter system set deferred_segment_creation=FALSE System altered. | 
Test tablomuzu yine aynı şekilde create edelim ;
| 1 2 | create table kamil.test20 as select * from dba_tables  where 1=2 Table created. | 
Dba_tables view’ indeki duruma bakalım ;
| 1 2 3 4 5 6 7 8 | COLUMN owner format a10 COLUMN table_name format a10 select owner, table_name,segment_created, initial_extent, blocks  from dba_tables where table_name = 'TEST20' OWNER 	        TABLE_NAME 	SEGMENT_CREATED 	      INITIAL_EXTENT     	BLOCKS ---------- 	---------- 	--------------- 		-------------- 		---------- KAMIL      	TEST20     		YES                      65536          		0 1 row selected. | 
Initial extend neden 65536 değeri 8k block size ‘ımız olduğu için bu şekilde geliyor (1024*8*8) . Tablo her ne kadar boş olsa da create edilme aşamasında bir block atandığından dolayı artık (8 k ‘ lık block kullandığımız dan dolayı) aşağıdaki view’ de de block kısmında 8 olarak görmemiz gerekiyor.
| 1 2 3 4 5 6 7 8 | COLUMN owner format a10 COLUMN segment_name format a10 select owner, segment_name, blocks  from dba_extents where segment_name = 'TEST20' OWNER      	SEGMENT_NA     BLOCKS ---------- 	---------- 	---------- KAMIL      	TEST20                8 1 row selected. | 
Tablomuzun bir block’ uğuda olduğundan dolayı artık dba_segments view’ indede görebiliyor olmamız gerekiyor. Bakalım ;
| 1 2 3 4 5 6 7 8 | COLUMN owner format a10 COLUMN segment_name format a10 select owner, segment_name  from dba_segments where segment_name = 'TEST20' OWNER      SEGMENT_NA ---------- ---------- KAMIL      TEST20 1 row selected. | 
Bu değerin FALSE olması demekde aslında tablo creation scriptinin aşağıdaki gibi olması anlamına geliyor ;
| 1 | create table kamil.test30 SEGMENT CREATION IMMEDIATE as select * from dba_tables  where 1=2; | 
Toparlarsak 11.2 ile birlikte tablo create etmek istersek segment create aşamasında kullanabileceğimiz iki farklı parametre bulunmaktadır. Bu parametrelerin kullanımı da bir initial parametre sayesinde db seviyesinde kullanımı basitleştirilmiştir diyebiliriz.
