尝试将表格标签从表格空间 oldTs 移至 newTs 。选项卡上有一个复合分区(Range / Hash)。因此,直接“Alter-Table-Move-Tablespace”查询将无法工作,需要按分区迁移分区。下面是选项卡的SQL:
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 TABLE tab_name MOVE PARTITION P201102 TABLESPACE newTbs;
但是,查询给出了以下错误:
SQL错误:ORA-14257:无法移动除Range,List之外的分区, 系统或哈希分区
另外,如果您在P201102 / P201103中注意到,每个都有两个子分区(P201103的SYS_SUBP5225和SYS_SUBP5226)。
要求使用alter语法的正确语法来迁移上述方案的分区。
答案 0 :(得分:2)
您可以move subpartitions但不能包含子分区的分区。 (很快,您可以移动细分。)
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;