Overview

You can use the ALTER TABLE... MOVE PARTITION command to move a partition or subpartition to a different tablespace. The ALTER TABLE... MOVE PARTITION command has two forms.
  • The first form is to move a partition to a new tablespace:
    ALTER TABLE table_name 
      MOVE PARTITION partition_name 
       TABLESPACE tablespace_name;
  • The second form is to move a subpartition to a new tablespace:
    ALTER TABLE table_name 
      MOVE SUBPARTITION subpartition_name 
       TABLESPACE tablespace_name;
The syntax of the ALTER TABLE... MOVE PARTITION command makes no distinctions between a partition and a subpartition:
  • You can move a partition by using the MOVE PARTITION or MOVE SUBPARTITION clause.
  • You can move a subpartition by using the MOVE PARTITION or MOVE SUBPARTITION clause.

Description

The ALTER TABLE... MOVE PARTITION command moves a partition or subpartition from its current tablespace to a different tablespace. You must own a table to call ALTER TABLE... MOVE PARTITION or ALTER TABLE... MOVE SUBPARTITION.

Parameters

Parameter Description
table_name The name (optionally schema-qualified) of the table in which the partition resides.
partition_name The name of the partition or subpartition to be moved.
tablespace_name The name of the tablespace to which the partition or subpartition will be moved.

Example - move a partition to a different tablespace

The following example moves a partition of the sales table from one tablespace to another. First, run the following command to create the sales table:
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
);
Querying the ALL_TAB_PARTITIONS view confirms that the partitions reside on the expected servers and tablespaces:
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)
After preparing the target tablespace, call the ALTER TABLE... MOVE PARTITION command to move the q1_2013 partition from a tablespace named ts_2 to a tablespace named ts_3:
ALTER TABLE sales MOVE PARTITION q1_2013 TABLESPACE ts_3; 
Querying the ALL_TAB_PARTITIONS view shows that the move was successful:
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)