Monday, June 8, 2009

ORA-39726: unsupported add/drop column operation on compressed tables

Bu hatayı açıklamaya çalışacağım.

Önce örnek bir tablo oluşturalım.

create table sil_sutun (adi varchar2(100),soyadi varchar(122));

Bugün bir tablodaki sütünü (column) silmem gerekti. Bu işlem için

alter table sil_sutun drop column soyadi;

komutunu kullandim. Ve bana

ORA-39726: unsupported add/drop column operation on compressed tables

Hatasını üretti. Hata kodunu googlede araştırmadan önce compressed i görünce dedim bu tablo sıkıştırılmış, normal haline getirirsem düzelir diye düşündüm ama işe yaramadı.

alter table sil_sutun NOCOMPRESS

ufak bir google aramasından sonra çözum yolunu buldum, Drop etmeden önce column u unused konumuna çekiyoruz. Daha sonra drop işlemi gerçekleştiriyoruz.

alter table sil_sutun set unused (soyadi);

işlem tamam komut çalışmaya hazır.

alter table sil_sutun drop column soyadi;

eğer bu da işe yaramaz ise tablomuzun scriptini alıyoruz. Ve tablonun scriptinde ufak bir değişiklik yapıyoruz.

CREATE TABLE SIL_SUTUN
(
ADI VARCHAR2(100 BYTE),
SOYADI VARCHAR2(122 BYTE)
)
TABLESPACE TBS_DATA_TEMP
PCTUSED 0
PCTFREE 0
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 160K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

Bu şekilde yeniden oluşturduktan sonra drop column işlemlerini yapabiliyoruz. Şimdi diyeceksiniz arkadaşım tabloyu yeniden oluşturken o column u yazmam olur biter bana tablo yeniden oluşturmadan lazım. İşte bu durumda benim buldugum çözum saçma, ama ne faydası tabloda column u değiştirme ihtimali var ise nocompress ile yaratmak gerekebilir ama bununda zaafları vardir. Araştırmak lazım bilen varsa yorumlar kısmına yazabilir.

No comments: