パーティション表の作成

レンジ・パーティション表

CREATE TABLE … PARTITION BY RANGE

-- 日付でレンジ・パーティション化
CREATE TABLE TAB_RANGE_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    LOGGING
    PCTFREE    20
    PARTITION BY RANGE (ORDER_DATE) (    
        PARTITION TAB_RANGE_PART01    VALUES LESS THAN ( TO_DATE('20090201','YYYYMMDD')) TABLESPACE PART01,
        PARTITION TAB_RANGE_PART02    VALUES LESS THAN ( TO_DATE('20090301','YYYYMMDD')) TABLESPACE PART02,
        PARTITION TAB_RANGE_PART03    VALUES LESS THAN ( TO_DATE('20090401','YYYYMMDD')) TABLESPACE PART03,
        PARTITION TAB_RANGE_PART04    VALUES LESS THAN ( TO_DATE('20090501','YYYYMMDD')) TABLESPACE PART04,
        PARTITION TAB_RANGE_PART05    VALUES LESS THAN ( MAXVALUE ) TABLESPACE PART05)
    ENABLE ROW MOVEMENT;
 
-- 数値範囲でレンジ・パーティション化
CREATE TABLE TAB_RANGE_PART_1 (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    LOGGING
    PCTFREE    20
    PARTITION BY RANGE (BOOK_CNT) (    -- 数値をパーティションキーにする。
        PARTITION TAB_RANGE_PART01    VALUES LESS THAN (2) TABLESPACE PART01,
        PARTITION TAB_RANGE_PART02    VALUES LESS THAN (3) TABLESPACE PART02,
        PARTITION TAB_RANGE_PART03    VALUES LESS THAN (4) TABLESPACE PART03,
        PARTITION TAB_RANGE_PART04    VALUES LESS THAN (5) TABLESPACE PART04,
        PARTITION TAB_RANGE_PART05    VALUES LESS THAN ( MAXVALUE ) TABLESPACE PART05)
    ENABLE ROW MOVEMENT;
セグメント物理属性

パーティション・レベルでテーブルレベルのセグメント物理属性を上書きされない場合、各パーティションはその基礎となる表の属性を継承する。
例えば、上記の作成SQLのRANGE_PART05定義にPCTFREE 5を指定する場合

SQL> CREATE TABLE TAB_RANGE_PART_1 (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    LOGGING
    PCTFREE    20
    PARTITION BY RANGE (BOOK_CNT) (
        PARTITION TAB_RANGE_PART01    VALUES LESS THAN (2) TABLESPACE PART01,
        PARTITION TAB_RANGE_PART02    VALUES LESS THAN (3) TABLESPACE PART02,
        PARTITION TAB_RANGE_PART03    VALUES LESS THAN (4) TABLESPACE PART03,
        PARTITION TAB_RANGE_PART04    VALUES LESS THAN (5) TABLESPACE PART04,
        PARTITION TAB_RANGE_PART05    VALUES LESS THAN ( MAXVALUE ) TABLESPACE PART05 PCTFREE 5) -- パーティションレベルでPCTFREE定義
    ENABLE ROW MOVEMENT;
 
Table created.
 
SQL> select table_owner,table_name,partition_name,tablespace_name,pct_free 
    from dba_tab_partitions where table_owner='TOM' and table_name = 'TAB_RANGE_PART_1';
 
TABLE TABLE_NAME           PARTITION_NAME       TABLESPACE_NAME        PCT_FREE
----- -------------------- -------------------- -------------------- ----------
TOM   TAB_RANGE_PART_1     TAB_RANGE_PART01     PART01                       20
TOM   TAB_RANGE_PART_1     TAB_RANGE_PART02     PART02                       20
TOM   TAB_RANGE_PART_1     TAB_RANGE_PART03     PART03                       20
TOM   TAB_RANGE_PART_1     TAB_RANGE_PART04     PART04                       20
TOM   TAB_RANGE_PART_1     TAB_RANGE_PART05     PART05                        5        <- 表レベル定義を上書きした。
 
SQL>

ハッシュ・パーティション表

CREATE TABLE … PARTITION BY HASH

同一表領域にハッシュパーティション表の作成

8個のパーティションをEXAMPLE表領域に作成する。システム生成パーティション名が割当てられる。

CREATE TABLE TAB_HASH_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    TABLESPACE    EXAMPLE
    PARTITION BY HASH (ORDER_ID)
    PARTITIONS 8;

下記は、パーティション名がシステムに自動に生成される。
CREATE TABLE TAB_HASH_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    TABLESPACE    EXAMPLE
    PARTITION BY HASH (ORDER_ID)
    PARTITIONS 5
    STORE IN (PART01,PART02,PART03,PART04,PART05)
個々のパーティション名と表領域を指定してハッシュパーティション表を作成する。
CREATE TABLE TAB_HASH_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    STORAGE ( INITIAL 2M )
    PARTITION BY HASH(ORDER_ID) (
        PARTITION TAB_HASH_P1 TABLESPACE PART01,
        PARTITION TAB_HASH_P2 TABLESPACE PART02,
        PARTITION TAB_HASH_P3 TABLESPACE PART03,
        PARTITION TAB_HASH_P4 TABLESPACE PART04,
        PARTITION TAB_HASH_P5 TABLESPACE PART05
    );

リスト・パーティション表

CREATE TABLE … PARTITION BY LIST

CREATE TABLE TAB_LIST_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    PARTITION BY LIST (BOOK_TYPE) (
        PARTITION TAB_LIST_P2 VALUES('CONCEPTS','ADMIN','RMAN') TABLESPACE PART02 PCTFREE 10,
        PARTITION TAB_LIST_P3 VALUES('RAC','DG') TABLESPACE PART03,
        PARTITION TAB_LIST_P4 VALUES('DWH') TABLESPACE PART04,
        PARTITION TAB_LIST_P1 VALUES(DEFAULT) TABLESPACE PART01 PCTFREE 20 STORAGE (INITIAL 2M)
    )

デフォルトパーティションを最後に指定しないと下記のエラーが発生する。
ORA-14318:
DEFAULTパーティションは最後に指定されたパーティションである必要があります

コンポジット・パーティション表

レンジ・ハッシュ(Range-Hash Partitioned Table)

CREATE TABLE …. PARTITION BY RANGE … SUBPARTITION BY HASH…
下記は五つのレンジパーティションを作って、パーティション毎に8つのハッシュサブパーティションを作る。サブパーティション名がシステムに自動に付けられる。

CREATE TABLE TAB_RANGE_HASH_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    PARTITION BY RANGE(ORDER_DATE) SUBPARTITION BY HASH(ORDER_ID) 
    SUBPARTITIONS 8 (
        PARTITION TAB_RANGE_HASH_PART01    VALUES LESS THAN ( TO_DATE('20090201','YYYYMMDD')) TABLESPACE PART01,
        PARTITION TAB_RANGE_HASH_PART02    VALUES LESS THAN ( TO_DATE('20090301','YYYYMMDD')) TABLESPACE PART02,
        PARTITION TAB_RANGE_HASH_PART03    VALUES LESS THAN ( TO_DATE('20090401','YYYYMMDD')) TABLESPACE PART03,
        PARTITION TAB_RANGE_HASH_PART04    VALUES LESS THAN ( TO_DATE('20090501','YYYYMMDD')) TABLESPACE PART04,
        PARTITION TAB_RANGE_HASH_PART05    VALUES LESS THAN ( MAXVALUE ) TABLESPACE PART05
    );

下記はパーティション(TAB_RANGE_HASH_P1~4)レベルでサブパーティションを定義した。
TAB_RANGE_HASH_P5で明確に定義していないため、表レベル定義に従って8つのサブパーティションが作られる。
CREATE TABLE TAB_RANGE_HASH_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    PARTITION BY RANGE(ORDER_DATE) SUBPARTITION BY HASH(ORDER_ID)  
    SUBPARTITIONS 8
    (
        PARTITION TAB_RANGE_HASH_P1    VALUES LESS THAN ( TO_DATE('20090201','YYYYMMDD')) TABLESPACE PART01
        (
            SUBPARTITION TAB_RANGE_HASH_P1_SP1,
            SUBPARTITION TAB_RANGE_HASH_P1_SP2,
            SUBPARTITION TAB_RANGE_HASH_P1_SP3,
            SUBPARTITION TAB_RANGE_HASH_P1_SP4
        ),
        PARTITION TAB_RANGE_HASH_P2    VALUES LESS THAN ( TO_DATE('20090301','YYYYMMDD')) TABLESPACE PART02
        (
            SUBPARTITION TAB_RANGE_HASH_P2_SP1,
            SUBPARTITION TAB_RANGE_HASH_P2_SP2,
            SUBPARTITION TAB_RANGE_HASH_P2_SP3,
            SUBPARTITION TAB_RANGE_HASH_P2_SP4
        ),
        PARTITION TAB_RANGE_HASH_P3    VALUES LESS THAN ( TO_DATE('20090401','YYYYMMDD')) TABLESPACE PART03
        (
            SUBPARTITION TAB_RANGE_HASH_P3_SP1,
            SUBPARTITION TAB_RANGE_HASH_P3_SP2
        ),
        PARTITION TAB_RANGE_HASH_P4    VALUES LESS THAN ( TO_DATE('20090501','YYYYMMDD')) TABLESPACE PART04
        (
            SUBPARTITION TAB_RANGE_HASH_P4_SP1,
            SUBPARTITION TAB_RANGE_HASH_P4_SP2,
            SUBPARTITION TAB_RANGE_HASH_P4_SP3
        ),
        PARTITION TAB_RANGE_HASH_P5    VALUES LESS THAN ( MAXVALUE ) TABLESPACE PART05
    );
レンジ・リスト(Range-List Partitioned Table)
CREATE TABLE TAB_RANGE_LIST_PART (
    ORDER_ID        NUMBER,
    ORDER_DATE      DATE DEFAULT SYSDATE,
    BOOK_NO         VARCHAR(20) NOT NULL,
    BOOK_TYPE       VARCHAR(20) NOT NULL,    
    BOOK_CNT        NUMBER    NOT NULL,
    REMARKS         VARCHAR2(40))
    PARTITION BY RANGE(ORDER_DATE) SUBPARTITION BY LIST(BOOK_TYPE)  
    (
        PARTITION TAB_RANGE_LIST_P1    VALUES LESS THAN ( TO_DATE('20090201','YYYYMMDD')) TABLESPACE PART01
        (
            SUBPARTITION TAB_RANGE_LIST_P1_SP1 VALUES('CONCEPTS','ADMIN','RMAN'),
            SUBPARTITION TAB_RANGE_LIST_P1_SP2 VALUES('RAC','DG'),
            SUBPARTITION TAB_RANGE_LIST_P1_SP3 VALUES('DWH'),
            SUBPARTITION TAB_RANGE_LIST_P1_SP4 VALUES(DEFAULT)
        ),
        PARTITION TAB_RANGE_LIST_P2    VALUES LESS THAN ( TO_DATE('20090301','YYYYMMDD')) TABLESPACE PART02
        (
            SUBPARTITION TAB_RANGE_LIST_P2_SP1 VALUES('CONCEPTS','ADMIN','RMAN'),
            SUBPARTITION TAB_RANGE_LIST_P2_SP2 VALUES('RAC','DG'),
            SUBPARTITION TAB_RANGE_LIST_P2_SP3 VALUES(DEFAULT)
        ),
        PARTITION TAB_RANGE_LIST_P3    VALUES LESS THAN ( TO_DATE('20090401','YYYYMMDD')) TABLESPACE PART03
        (
            SUBPARTITION TAB_RANGE_LIST_P3_SP1 VALUES('CONCEPTS','ADMIN','RMAN'),
            SUBPARTITION TAB_RANGE_LIST_P3_SP2 VALUES(DEFAULT)
        ),
        PARTITION TAB_RANGE_LIST_P4    VALUES LESS THAN ( TO_DATE('20090501','YYYYMMDD')) TABLESPACE PART04
        (
            SUBPARTITION TAB_RANGE_LIST_P4_SP1 VALUES('CONCEPTS','ADMIN','RMAN'),
            SUBPARTITION TAB_RANGE_LIST_P4_SP2 VALUES('RAC','DG'),
            SUBPARTITION TAB_RANGE_LIST_P4_SP3 VALUES('DWH'),
            SUBPARTITION TAB_RANGE_LIST_P4_SP4 VALUES(DEFAULT)
        ),
        PARTITION TAB_RANGE_LIST_P5    VALUES LESS THAN ( MAXVALUE ) TABLESPACE PART05
        (
            SUBPARTITION TAB_RANGE_LIST_P5_SP1 VALUES('CONCEPTS'),
            SUBPARTITION TAB_RANGE_LIST_P5_SP2 VALUES('RAC','DG'),
            SUBPARTITION TAB_RANGE_LIST_P5_SP3 VALUES('DWH'),
            SUBPARTITION TAB_RANGE_LIST_P5_SP4 VALUES('ADMIN','RMAN'),
            SUBPARTITION TAB_RANGE_LIST_P5_SP5 VALUES(DEFAULT)
        )
    );
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License