GAGA LIFE.

インフラエンジニアブログ

スポンサーリンク

単一パーティションをコンポジットパーティション化する(ALTER TABLE MODIFY)

概要

以前のバージョンでは、大きく以下の方法がありました。
* エクスポート/インポート
* サプクエリでインサート
* パーティション交換
* 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

スポンサーリンク