使用 ALTER TABLE… MOVE PARTITION 命令将分区移动到另一个表空间。该命令具有两种形式。

第一种形式将分区移动到新的表空间:

ALTER TABLE table_name
  MOVE PARTITION partition_name
   TABLESPACE tablespace_name;

第二种形式将二级分区移动到新的表空间:

ALTER TABLE table_name
  MOVE SUBPARTITION subpartition_name
   TABLESPACE tablespace_name;

说明

ALTER TABLE…MOVE PARTITION 命令将分区从其当前的表空间移动到另一个表空间。ALTER TABLE… MOVE PARTITION 命令可以移动按 LIST、RANGE 或 HASH 分区的表的分区。

上述相同行为适用于与 MOVE SUBPARTITION 子句一起使用的 subpartition_name。

您必须拥有表才能调用 ALTER TABLE… MOVE PARTITION 或 ALTER TABLE… MOVE SUBPARTITION。

参数

参数 说明
table_name 分区或二级分区所在的表的名称(可能是 schema 限定的)。
partition_name 要移动的分区的名称。
subpartition_name 要移动的二级分区的名称。
tablespace_name 分区或二级分区将移动到的表空间的名称。

示例 - 将分区移动到另一个表空间

以下示例将 sales 表的分区从一个表空间移动到另一个表空间。首先,使用以下命令创建 sales 表:

CREATE TABLE sales
(
  dept_no     number,
  part_no     varchar2,
  country     varchar2(20),
  date        date,
  amount      number
)
PARTITION BY RANGE(date)
(
  PARTITION q1_2012 VALUES LESS THAN ('2012-Apr-01'),
  PARTITION q2_2012 VALUES LESS THAN ('2012-Jul-01'),
  PARTITION q3_2012 VALUES LESS THAN ('2012-Oct-01'),
  PARTITION q4_2012 VALUES LESS THAN ('2013-Jan-01') TABLESPACE ts_1,
  PARTITION q1_2013 VALUES LESS THAN ('2013-Mar-01') TABLESPACE ts_2
);

查询 ALL_TAB_PARTITIONS 视图确认分区位于预期的服务器和表空间中:

acctg=# SELECT partition_name, tablespace_name FROM ALL_TAB_PARTITIONS;
 partition_name | tablespace_name
----------------+-----------------
 Q1_2012        |
 Q2_2012        |
 Q3_2012        |
 Q4_2012        | TS_1
 Q1_2013        | TS_2
(5 rows)

在准备好目标表空间后,调用 ALTER TABLE… MOVE PARTITION 命令来将 q1_2013 分区从名为 ts_2 的表空间移动到名为 ts_3 的表空间:

ALTER TABLE sales MOVE PARTITION q1_2013 TABLESPACE ts_3;

查询 ALL_TAB_PARTITIONS 视图显示移动成功:

acctg=# SELECT partition_name, tablespace_name FROM ALL_TAB_PARTITIONS;
 partition_name | tablespace_name
----------------+-----------------
 Q1_2012        |
 Q2_2012        |
 Q3_2012        |
 Q4_2012        | TS_1
 Q1_2013        | TS_3
(5 rows)