【发布时间】:2016-03-09 08:54:52
【问题描述】:
试图将表 tab 从表空间 oldTs 移动到 newTs。选项卡上有一个复合分区(范围/哈希)。因此,直接的“Alter-Table-Move-Tablespace”查询将不起作用,需要逐个分区迁移。下面是tab的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 语句语法。
【问题讨论】:
标签: oracle oracle11g partition tablespace