使用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)