drop column und ORA-39726 bei komprimierten Tabellen

Problem:


DROP COLUMN scheitert mit ORA-39726
"Nicht unterstützter Vorgang ... bei komprimierten Tabellen"
-> Blöd, wer hat eigentlich die Komprimierung eingeschaltet? Und warum?


Lösung:

Wenn die Tabelle nicht per DROP und CREATE komplett neu erstellt werden kann (oder soll) wirds etwas aufwändiger:

1) Spalte auf unused setzen:
alter table D_TBL set unused column X_FLAG ;

select * from all_unused_col_tabs;
-> hier sollten nun je Tabelle die Anzahl der nicht benutzten Spalten stehen.

2) Unbenutzte Spalten löschen:
alter table D_TBL drop unused columns;


Falls das nicht hilft (wg. Partitionierung???):

1) Kompression ausschalten (mit MOVE und ggfs parallel X!):
alter table D_TBL move nocompress;
bzw.
alter table D_TBL move partition P_XYZ nocompress;

2) dann unbenutzte Spalten löschen:
alter table D_TBL drop unused columns;

3) Kompression wieder einschalten (mit MOVE und ggfs parallel X!):
alter table D_TBL move compress;
bzw.
alter table D_TBL move partition P_XYZ compress;



Falls das eleganter geht, bin ich für Hinweise dankbar!


Zum (De-)Komprimieren aller Partitionen einer Tabelle z.B.
SELECT    'ALTER TABLE MY_TBL MOVE PARTITION '
         || PARTITION_NAME
         || ' (NO)COMPRESS;' SQL_TXT
    FROM USER_TAB_PARTITIONS
   WHERE table_name = 'MY_TBL'
ORDER BY PARTITION_POSITION;

...und Index-Rebuild nicht vergessen:
select 'ALTER INDEX '|| ip.index_name ||' REBUILD PARTITION '|| partition_name ||'; ' SQL_TXT
  from all_indexes ai, all_ind_partitions ip
  where ai.table_owner = 'MY_SCHEMA' and ai.table_name = 'MY_TBL'
  and ai.partitioned = 'YES' and ai.index_name = ip.index_name
  and ip.status = 'UNUSABLE';

Kommentare

Beliebte Posts aus diesem Blog

PGA unter Oracle 11g

trunc(sysdate) - nette Spiele mit dem Datum

Datapump - Verzeichnis erstellen