如何在oracle表中提前压缩分区和子分区。 该表已经有数据了,我需要压缩旧数据以及即将出现的新数据。 分区名称是系统生成的名称。 数据库是Oracle11g
表结构:
CREATE TABLE SCH.STU_DATA
(
ROLL_NO NUMBER,
P_DATE DATE
S_VALUE VARCHAR2(10 CHAR)
)
NOCOMPRESS
TABLESPACE DATA_PARTS
RESULT_CACHE (MODE DEFAULT)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
PARTITION BY RANGE (P_DATE)
INTERVAL( NUMTOYMINTERVAL( 1, 'MONTH'))
SUBPARTITION BY LIST (ROLL_NO)
SUBPARTITION TEMPLATE
(SUBPARTITION ROLL_1 VALUES (1),
SUBPARTITION ROLL_2 VALUES (2),
SUBPARTITION ROLL_3 VALUES (3),
SUBPARTITION ROLL_4 VALUES (4),
SUBPARTITION ROLL_5 VALUES (5)
)
(
PARTITION VALUES LESS THAN (TO_DATE(' 2019-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
NOCOMPRESS
TABLESPACE DATA_PARTS
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
SUBPARTITIONS 5 STORE IN (DATA_PARTS,DATA_PARTS,DATA_PARTS,DATA_PARTS,DATA_PARTS),
PARTITION VALUES LESS THAN (TO_DATE(' 2019-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
NOCOMPRESS
TABLESPACE DATA_PARTS
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
SUBPARTITIONS 5 STORE IN (DATA_PARTS,DATA_PARTS,DATA_PARTS,DATA_PARTS,DATA_PARTS),
PARTITION VALUES LESS THAN (TO_DATE(' 2019-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
NOCOMPRESS
TABLESPACE DATA_PARTS
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
)
NOCACHE
NOPARALLEL
MONITORING;
当我在sql下运行时,出现以下错误:
ALTER TABLE SCH.STU_DATA MOVE PARTITION SYS_P812325 TABLESPACE DATA_PARTS compress for all operations ;
错误消息:
ORA-14020: this physical attribute may not be specified for a table partition
答案 0 :(得分:0)
我认为问题是您的表已分区。
不确定这是否行得通-我现在没有时间对其进行测试-可以尝试一下。对整个表启用压缩,然后移动子分区。
ALTER TABLE SCH.STU_DATA compress for all operations ;
ALTER TABLE SCH.STU_DATA MOVE SUBPARTITION whatever TABLESPACE DATA_PARTS;
通过句柄将其全部写出来可能有点令人讨厌,但是您可以使用ALL_TAB_SUBPARTITIONS生成脚本。