尝试将表选项卡从表空间oldTs移到newTs。选项卡上有一个复合分区(Range/Hash)。因此,直接的“更改表-移动-表空间”查询将无法工作,需要通过分区迁移分区。下面是:
CREATE TABLE tab
(
col_1 char(6),
col_2 varchar2(4),
col_3 varchar2(5)
)
TABLESPACE oldTs PARTITION BY RANGE
(
"col_1"
)
SUBPARTITION BY HASH
(
"col_2"
)
SUBPARTITIONS 1
(
PARTITION "P201102" VALUES LESS THAN ('201103') PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "oldTs" NOCOMPRESS NOLOGGING ( SUBPARTITION "SYS_SUBP5223" TABLESPACE "oldTs" NOCOMPRESS , SUBPARTITION "SYS_SUBP5224" TABLESPACE "oldTs" NOCOMPRESS ),
PARTITION "P201103" VALUES LESS THAN ('201104') PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "oldTs" NOCOMPRESS NOLOGGING ( SUBPARTITION "SYS_SUBP5225" TABLESPACE "oldTs" NOCOMPRESS , SUBPARTITION "SYS_SUBP5226" TABLESPACE "oldTs" NOCOMPRESS )
);有几个这样的每月分区,创建了一个获得所有分区名称(如P201102、P2001103)的过程,并为移动分区生成一个alter。为了前夫,
ALTER TABLE tab_name MOVE PARTITION P201102 TABLESPACE newTbs;但是,查询给出了以下错误:
SQL错误: ORA-14257:不能移动除范围、列表、系统或散列分区之外的分区。
另外,如果您在P 201102/P 201103中注意到,每个分区都有两个子分区(SYS_SUBP5225 & SYS_SUBP5226 for P201103)。
为上述场景迁移分区,需要ALTER语句的正确语法。
发布于 2015-12-04 13:04:31
您可以使用移动子分区,但不能使用包含子分区的分区。(很快,您可以移动段。)
ALTER TABLE tab_name MOVE SUBPARTITION SYS_SUBP5225 TABLESPACE newTbs;UPDATE:如果您想更改创建新分区的位置,那么运行下面的ddl,这将更改表的一个分布--其中创建了新的分区。
alter table tab_name modify default attributes tablespace newTbs;UPDATE2:如果您想更改为分区创建子分区的位置,那么在下面运行更改分区的属性--其中创建了新的子分区:
alter table tab_name modify default attributes for partition P201102 tablespace newTbs;https://stackoverflow.com/questions/34088095
复制相似问题