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.