How to drop columns in a compressed table?
Oracle support document 1987500.1 "How to Drop Columns in Compressed Tables" had the solution: the table needs to be uncompressed first, the the columns removed, then it can be compressed again:
ALTER TABLE foo MOVE NOCOMPRESS;
ALTER TABLE foo DROP UNUSED COLUMNS;
ALTER TABLE foo MOVE COMPRESS FOR OLTP;
SELECT column_name, data_type, hidden_column
FROM user_tab_cols WHERE table_name = 'FOO';
COLUMN_NAME DATA_TYPE HIDDEN_COLUMN
P NUMBER NO
I NUMBER NO
ALTER TABLE par EXCHANGE PARTITION p1 WITH TABLE foo;
Table PAR altered.
N.B. The compression/recompression is fast if the table is empty.