使用ALTER TABLE…MOVE PARTITION命令可将分区或子分区移动到不同的表空间中。

语法介绍

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命令的语法在分区和子分区之间没有任何区别。
  • 您可以使用MOVE PARTITION 或 MOVE SUBPARTITION子句来移动分区。
  • 您可以使用MOVE PARTITION 或 MOVE SUBPARTITION子句来移动子分区。

描述

ALTER TABLE…MOVE PARTITION命令用于从分区或子分区当前的表空间中将其移动到不同的表空间。您必须先拥有一个表,才能调用ALTER TABLE…MOVE PARTITION 或 ALTER TABLE…MOVE SUBPARTITION。

参数

参数 参数说明
table_name 分区所属的表名称(可以采用模式限定的方式引用)。
partition_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_2013        | ts_2
 q4_2012        | ts_1
 q3_2012        | 
 q2_2012        | 
 q1_2012        | 
(5 rows)
在准备目标表空间之后,您就可以通过调用ALTER TABLE…MOVE PARTITION命令从表空间ts_2中将分区q1_2013移动到表空间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_2013        | ts_3
 q4_2012        | ts_1
 q3_2012        | 
 q2_2012        | 
 q1_2012        | 
(5 rows)