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

6 May by Ahmet Duruöz

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.

 

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir