如何在Oracle表中推进压缩分区和子分区

时间:2019-12-16 08:54:14

标签: sql oracle oracle11g

如何在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

1 个答案:

答案 0 :(得分:0)

我认为问题是您的表已分区。

不确定这是否行得通-我现在没有时间对其进行测试-可以尝试一下。对整个表启用压缩,然后移动子分区。

  1. ALTER TABLE SCH.STU_DATA compress for all operations ;
  2. ALTER TABLE SCH.STU_DATA MOVE SUBPARTITION whatever TABLESPACE DATA_PARTS;

通过句柄将其全部写出来可能有点令人讨厌,但是您可以使用ALL_TAB_SUBPARTITIONS生成脚本。

相关问题