将具有复合分区(哈希/范围)的表迁移到不同的表空间

问题描述 投票:2回答:2

试图将表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”查询将不起作用,需要迁移分区...

oracle oracle11g partition tablespace
2个回答
2
投票

您可以move subpartitions,但不能包含包含子分区的分区。 (很快,您可以移动细分。)


0
投票

您也可以尝试DBMS_REDEFINITION

© www.soinside.com 2019 - 2024. All rights reserved.