Database zaman içinde yapmış olduğumuz DML işlemleri neticesinde block yapılarında duzensizlikler meydana gelir.Bu duzensizliklerin performansa olumsu yonde buyuk etkisi vardır.

Örnek vermek gerekirse bazen bir blocktan okuyabileceğimiz datayı 4-5 blocktan okumak zorunda kalabiliriz. Bu blocklarda datafileların farklı yerlkerine dağılmış olabilirler.

Row migration ve row chaining dediğimiz olaylar performans tarafında istemediğimiz olaylardır.

Row chaining bir block yazmada yetersiz kalma neticesinde devamındaki blocklarıda kullanmasıdır. Genelde insert işlemlerinde oluşur.

Row migrationda ise update sonucunda PCTFREE değeri dışında başka bir blocka yazma surecidir. Bu iki surecide önlemek mümkündür.

Bu işlemlerli önlemek eğer 10g öncesinde bir databaseniz varsa

-belirli zamanlarda Export import yapmak
-Tabloyu drop veya truncate edip datayı tekrar geri almak

olabilir.

Gunümüzde buna pek gerek yoktur.
Alter table tabload move komutuda cut ve paste gibi davrandığından bu sorunun çözümüne katkıda bulunur.

Bunların dışında Online table redifination
yada migrated rowları bulupbaska bir tabloya kopyalamak sonra migrated rowları silmek ve kopyaladığımız diğer tablodan orjinale geri getirmekde uygun seçenektir.

Analyze table tablo adı list chained rows;

select owner_name,table_name,head_rowid from chained_rows tablosu dedikmi bu rowlarin idlerini bulup bu sureci yapabiliriz.

Tabi unutulmaması gereken 10g ile birlikte gelen shrink özelliğide rowların dağılıma önemli performans katkısı sağlar.

ALTER TABLO taloadı enable row movement;
alter table tabloadı shrink space cascade;