概要
以前のバージョンでは、大きく以下の方法がありました。
* エクスポート/インポート
* サプクエリでインサート
* パーティション交換
* DBMS_REDEFINITION
12.2以降は、非パーティションからパーティション化する場合や単一パーティションからコンポジットパーティション化する場合に
以下の方法が使用できます。
* ALTER TABLE SQL 文で MODIFY 句を使用する
動作確認
リストパーティションをリスト-ハッシュ(4)のコンポジットパーティションに変更
事前準備:単一パーティション作成
SQL> drop table t1 purge; SQL> CREATE TABLE t1 (C1 NUMBER, C2 varchar2(17) NOT NULL, C3 VARCHAR2(100) , CONSTRAINT PK_T4 PRIMARY KEY (C1)) PARTITION BY LIST(C2) ( PARTITION PRT_20220217104758777 VALUES ('20220217104758777'), PARTITION PRT_20220217122637052 VALUES ('20220217122637052') ); OWNER OBJECT_TYPE TABLE_NAME PARTITION_NAME SUBPARTITION_NAME NUM_ROWS LAST_ANALYZED STATTYPE_LOCKED STALE_STATS -------------------- ------------ -------------------- ------------------------- -------------------- ---------- ------------------- -------------------- -------------------- SCOTT PARTITION T1 PRT_20220217104758777 SCOTT PARTITION T1 PRT_20220217122637052 SCOTT TABLE T1 TABLE_NAME PARTITION_NAME NUM_ROWS GLOBAL_STATS LAST_ANALYZED NUM_ROWS -------------------- ------------------------- ---------- -------------------- ------------------- ---------- T1 PRT_20220217104758777 NO T1 PRT_20220217122637052 NO
単一パーティションをコンポジットパーティション化して、さらにADD PARTITIONする
SQL> ALTER TABLE T1 MODIFY PARTITION BY LIST (C2) SUBPARTITION BY HASH (C1) SUBPARTITIONS 4 ( PARTITION PRT_20220217104758777 VALUES ('20220217104758777'), PARTITION PRT_20220217122637052 VALUES ('20220217122637052') ) ONLINE ; OWNER OBJECT_TYPE TABLE_NAME PARTITION_NAME SUBPARTITION_NAME NUM_ROWS LAST_ANALYZED STATTYPE_LOCKED STALE_STATS -------------------- ------------ -------------------- ------------------------- -------------------- ---------- ------------------- -------------------- -------------------- SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP640 SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP641 SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP642 SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP643 SCOTT PARTITION T1 PRT_20220217104758777 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP644 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP645 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP646 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP647 SCOTT PARTITION T1 PRT_20220217122637052 SCOTT TABLE T1 TABLE_NAME PARTITION_NAME NUM_ROWS GLOBAL_STATS LAST_ANALYZED NUM_ROWS -------------------- ------------------------- ---------- -------------------- ------------------- ---------- T1 PRT_20220217104758777 NO T1 PRT_20220217122637052 NO SQL> ALTER TABLE T1 ADD PARTITION PRT_20220317122637052 VALUES ('20220317122637052'); Table altered. OWNER OBJECT_TYPE TABLE_NAME PARTITION_NAME SUBPARTITION_NAME NUM_ROWS LAST_ANALYZED STATTYPE_LOCKED STALE_STATS -------------------- ------------ -------------------- ------------------------- -------------------- ---------- ------------------- -------------------- -------------------- SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP640 SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP641 SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP642 SCOTT SUBPARTITION T1 PRT_20220217104758777 SYS_SUBP643 SCOTT PARTITION T1 PRT_20220217104758777 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP644 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP645 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP646 SCOTT SUBPARTITION T1 PRT_20220217122637052 SYS_SUBP647 SCOTT PARTITION T1 PRT_20220217122637052 SCOTT SUBPARTITION T1 PRT_20220317122637052 SYS_SUBP648 SCOTT SUBPARTITION T1 PRT_20220317122637052 SYS_SUBP649 SCOTT SUBPARTITION T1 PRT_20220317122637052 SYS_SUBP650 SCOTT SUBPARTITION T1 PRT_20220317122637052 SYS_SUBP651 SCOTT PARTITION T1 PRT_20220317122637052 SCOTT TABLE T1 16 rows selected. TABLE_NAME PARTITION_NAME NUM_ROWS GLOBAL_STATS LAST_ANALYZED NUM_ROWS -------------------- ------------------------- ---------- -------------------- ------------------- ---------- T1 PRT_20220217104758777 NO T1 PRT_20220217122637052 NO T1 PRT_20220317122637052 NO