27 Mayıs 2010 Perşembe

ORA-10631: SHRINK clause should not be specified for this object

Selamlar,

Başlıktan da anlaşılabileceği üzere ORA-10631 hatası üzerine çok kısa yorum yazacağım. 2005 yılında 9i ile tanıştığım zamandan bu yana bu hata ile karşılaşmamıştım. Halbuki çok fazla sayıda shrink komutu koşmuşluğum var.

Geçtiğimiz günlerde Oracle Forumlarını okurken bir okurun sorusuna shrink komutunun kullanması gerektiğini söylerek cevap vermiştim. Ancak başlıktaki hatayı aldığını söyledi ve çok ilginç bir neden çıktı arkasından...

Kullanıcı, tabloyu yaratırken FUNCTION BASED INDEX yaratmış. Function based index'in yapısından dolayı shrink space ya da shrink space compact komutları çalışmıyor ancak tablo üzerinde enable row movement komutu koşturulabiliyor! Bu durumda yapılabilecek en mantıklı çözüm yolu da indeksi kaldırıp yeniden yaratmak. Yeniden yaratmadan önce de High Water Mark'ı sıfırlayabilmek için shrink space komutunu göndermek. Bu noktada eklemem gerekiyor ki eğer tablodaki HWM sıfırlandıktan sonra tahsis ettiği alanları da boşaltmak isterseniz shrink space compact göndermeniz gerekiyor. Yalnız unutmamak gerekiyor ki compact ile birlikte tablo kilitlenecek, erişileyemecek ve clustering factor artacaktır. Aynı zamanda rowid üzerinde oluşturulmuş trigger'lar da geçersiz kılınacaktır.

Yukarıda sözü geçen sorguları aşağıda bulabilirsiniz;

alter table enable row movement;
alter table disable row movement;
alter table shrink space;
alter table shrink space compact;

Hiç yorum yok:

Takip et: @oganozdogan