试图将表tab从表空间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:无法移动除范围,列表,系统或哈希分区
此外,如果您在P201102 / P201103中注意到,则每个子分区都有两个子分区(P201103的SYS_SUBP5225和SYS_SUBP5226)。
在上述情况下,需要正确的alter语句语法来迁移分区。
[尝试将表选项卡从表空间oldT移至newT。选项卡上有一个复合分区(Range / Hash)。因此,直接的“ Alter-Table-Move-Tablespace”查询将不起作用,需要迁移分区...