ORA-39726: unsupported add/drop column operation on compressed tables
Compressed tablolarda bir kolon drop edildiğinde , işlem başarılı görülse de drop edilen kolon unused olarak işaretlenir. Sonrasında bu unused kolonların drop edilmesi gerekmektedir.
Bunu bir örnek ile anlatmaya çalışayım. Önce DENEME isimli bir compressed tablo oluşturalım.
SQL> CREATE TABLE ADURUOZ.DENEME
(
AD VARCHAR2(10 BYTE),
SOYAD VARCHAR2(10 BYTE),
KURUM VARCHAR2(10 BYTE),
TARIH DATE
)
COLUMN STORE COMPRESS FOR QUERY HIGH;
Table created.
Biraz kayıt oluşturalım .
SQL> set serveroutput on
begin
for a in 1..100 loop
insert into ADURUOZ.DENEME values ('AHMET','DURUÖZ','İNTERİVA','06-MAY-2020');
end loop;
end;
/
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select count(*) from aduruoz.deneme;
COUNT(*)
----------
100
TARIH kolonunu silelim.
SQL> ALTER TABLE ADURUOZ.DENEME DROP COLUMN TARIH;
Table altered.
Görüldüğü gibi işlem başarılı sonuçlanmıştır. Fakat kolon drop edilmedi ve unused olarak işaretlenmiştir. UNUSED kolonları aşağıdaki sorgu ile görebilirsiniz.
SQL> select * from dba_unused_col_tabs;
OWNER TABLE_NAME COUNT
---------- ---------- ----------
ADURUOZ DENEME 1
Sonrasında bu tablodaki unused kolonları drop etmeye çalıştığımızda ORA-39726 hatası alınacak ve işlem yapılmayacaktır. Kolon unused olarak kaldığında ise daha farklı sorunlara sebep olacaktır.
SQL> ALTER TABLE ADURUOZ.DENEME DROP UNUSED COLUMNS;
ALTER TABLE ADURUOZ.DENEME DROP UNUSED COLUMNS
*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables
Sıkıştırma olan tablodaki bir kolonu drop ettikten sonra bu tablodaki unused kolonları aşağıdaki adımları uygulayarak drop edebilirsiniz.
SQL> alter table ADURUOZ.DENEME move nocompress;
Table altered.
SQL> alter table ADURUOZ.DENEME DROP UNUSED COLUMNS;
Table altered.
SQL> alter table ADURUOZ.DENEME COMPRESS FOR QUERY HIGH;
Table altered.
Bu işlemler büyük tablolarda çok uzun süreceğinden daha kısa bir yöntem olan drop edilecek kolon olmayan yeni sıkıştırılmış tablo oluşturup mevcut tablodaki verileri yeni tabloya taşımak daha kısa sürecektir.
NOT : insert işleminde /*+APPEND NOLOGGING*/ şeklinde bir hint kullanırsanız direct path load kullanarak redo üretmeden işlem yapacağından insert işlemi çok daha kısa sürecektir.