パーティションスクリプト

※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください

--レンジパーティション
CREATE TABLE TAB_RANGE1
(ID   NUMBER(5)   ,
 NAME VARCHAR2(30),
 YYYYMMDD    DATE
)PARTITION BY RANGE(YYYYMMDD)
 (PARTITION P2011Q1 VALUES LESS THAN(TO_DATE('2011-04-01', 'YYYY-MM-DD')),
  PARTITION P2011Q2 VALUES LESS THAN(TO_DATE('2011-07-01', 'YYYY-MM-DD')),
  PARTITION P2011Q3 VALUES LESS THAN(TO_DATE('2011-10-01', 'YYYY-MM-DD')),
  PARTITION P2011Q4 VALUES LESS THAN(MAXVALUE))
--COMPRESS
--STORAGE(MINEXTENTS 2)
--TABLESPACE USERS
;

--マルチカラムレンジパーティション
CREATE TABLE TAB_MULTI_RANGE1
(ID   NUMBER(5) PRIMARY KEY,
 YYYY  VARCHAR2(4),
 MM    VARCHAR2(2)
)PARTITION BY RANGE(YYYY,MM)
 (PARTITION P1 VALUES LESS THAN('2011','01'),
  PARTITION P2 VALUES LESS THAN('2011','06'),
  PARTITION P3 VALUES LESS THAN('2012','01'));


--リストパーティション
CREATE TABLE TAB_LIST1
(ID NUMBER(5),
 NAME VARCHAR2(30),
 ADDRESS VARCHAR2(20),
 YYYYMMDD DATE)
PARTITION BY LIST(ADDRESS)
(
 PARTITION SALES_WEST VALUES('TOKYO', 'KANAGAWA'),
 PARTITION SALES_EAST VALUES('SAITAMA', 'CHIBA', 'IBARAKI'),
 PARTITION SALES_OTHER VALUES(DEFAULT)
);

--ハッシュパーティション(個数指定)
CREATE TABLE TAB_HASH1
(ID NUMBER(5),
 NAME VARCHAR2(30),
 ADDRESS VARCHAR2(20),
 YYYYMMDD DATE)
PARTITION BY HASH(ADDRESS) PARTITIONS 4;

--ハッシュパーティション(パーティション名+表領域指定)
CREATE TABLE TAB_HASH2
(ID NUMBER(5),
 NAME VARCHAR2(30),
 ADDRESS VARCHAR2(20),
 YYYYMMDD DATE)
PARTITION BY HASH(ADDRESS) 
(PARTITION HASH_01 tablespace users,
 PARTITION HASH_02 tablespace users,
 PARTITION HASH_03 tablespace users,
 PARTITION HASH_04 tablespace users);

--コンポジット(複合)パーティション
--レンジ-ハッシュ(8iより)
CREATE TABLE TAB_COMPOSITE1
(ID   NUMBER(5)   ,
 NAME VARCHAR2(30),
 YYYYMMDD    DATE
)PARTITION BY RANGE(YYYYMMDD)
 SUBPARTITION BY HASH(ID)
 SUBPARTITIONS 4
 (PARTITION VALUES LESS THAN(TO_DATE('2011-04-01', 'YYYY-MM-DD')),
  PARTITION VALUES LESS THAN(TO_DATE('2011-07-01', 'YYYY-MM-DD')),
  PARTITION VALUES LESS THAN(TO_DATE('2011-10-01', 'YYYY-MM-DD')),
  PARTITION VALUES LESS THAN(TO_DATE('2012-01-01', 'YYYY-MM-DD')));

--レンジ-ハッシュ(8iより)(サブパーティション名+表領域名指定)
CREATE TABLE TAB_COMPOSITE2
(ID   NUMBER(5)   ,
 NAME VARCHAR2(30),
 YYYYMMDD    DATE
)PARTITION BY RANGE(YYYYMMDD)
 SUBPARTITION BY HASH(ID)
 (PARTITION P2011Q1 VALUES LESS THAN(TO_DATE('2011-04-01', 'YYYY-MM-DD'))
  (SUBPARTITION HASH_01 tablespace users,
   SUBPARTITION HASH_02 tablespace users,
   SUBPARTITION HASH_03 tablespace users,
   SUBPARTITION HASH_04 tablespace users),
  PARTITION P2011Q2 VALUES LESS THAN(TO_DATE('2011-07-01', 'YYYY-MM-DD'))
   (SUBPARTITION HASH_11 tablespace users,
    SUBPARTITION HASH_12 tablespace users,
    SUBPARTITION HASH_13 tablespace users,
    SUBPARTITION HASH_14 tablespace users),
  PARTITION P2011Q3 VALUES LESS THAN(TO_DATE('2011-10-01', 'YYYY-MM-DD'))
   (SUBPARTITION HASH_21 tablespace users,
    SUBPARTITION HASH_22 tablespace users,
    SUBPARTITION HASH_23 tablespace users,
    SUBPARTITION HASH_24 tablespace users),
  PARTITION P2011Q4 VALUES LESS THAN(TO_DATE('2007-01-01', 'YYYY-MM-DD'))
   (SUBPARTITION HASH_31 tablespace users,
    SUBPARTITION HASH_32 tablespace users,
    SUBPARTITION HASH_33 tablespace users,
    SUBPARTITION HASH_34 tablespace users))
;

--レンジ-リスト(9iより)
CREATE TABLE TAB_COMPOSITE2
(ID   NUMBER(5)   ,
 NAME VARCHAR2(30),
 YYYYMMDD    DATE
)PARTITION BY RANGE(YYYYMMDD)
 SUBPARTITION BY LIST(ID)
 (PARTITION P2011Q1 VALUES LESS THAN(TO_DATE('2011-04-01', 'YYYY-MM-DD'))
    (SUBPARTITION LIST11 VALUES(1),
     SUBPARTITION LIST12 VALUES(2)),
  PARTITION P2011Q2 VALUES LESS THAN(TO_DATE('2011-07-01', 'YYYY-MM-DD'))
    (SUBPARTITION LIST21 VALUES(1),
     SUBPARTITION LIST22 VALUES(2)),
  PARTITION P2011Q3 VALUES LESS THAN(TO_DATE('2011-10-01', 'YYYY-MM-DD'))
    (SUBPARTITION LIST31 VALUES(1),
     SUBPARTITION LIST32 VALUES(2)),
  PARTITION P2011Q4 VALUES LESS THAN(TO_DATE('2012-01-01', 'YYYY-MM-DD'))
    (SUBPARTITION LIST41 VALUES(1),
     SUBPARTITION LIST42 VALUES(2)));

--ローカルインデックス(パーティション列に対するインデックスパーティション)
CREATE INDEX I_TAB_RANGE1_YYYYMMDD ON TAB_RANGE1 (YYYYMMDD) LOCAL
--TABLESPACE USERS
;

--ローカルインデックス(非パーティション列に対するインデックスパーティション)
CREATE INDEX I_TAB_RANGE1_ID ON TAB_RANGE1 (ID) LOCAL
;

--グローバルインデックス
CREATE INDEX I_TAB_RANGE1_ID2 ON TAB_RANGE1 (ID,YYYYMMDD)
;

--レンジパーティショングローバルインデックス
CREATE INDEX I_TAB_RANGE1_ID3 ON TAB_RANGE1 (ID)
GLOBAL PARTITION BY RANGE (ID)
(PARTITION p1 VALUES LESS THAN (10000),
 PARTITION p2 VALUES LESS THAN (20000),
 PARTITION p3 VALUES LESS THAN (MAXVALUE));

--ハッシュパーティショングローバルインデックス
CREATE INDEX I_TAB_RANGE1_ID ON TAB_RANGE1 (ID)
GLOBAL PARTITION BY HASH (ID)
PARTITIONS 4;

--コンポジットパーティショングローバルインデックス
CREATE INDEX I_TAB_COMPOSITE1_YYYYMMDD_id ON TAB_COMPOSITE1 (YYYYMMDD) LOCAL
 (PARTITION P1
   (SUBPARTITION p11, SUBPARTITION p12, 
    SUBPARTITION p13, SUBPARTITION p14),
 PARTITION P2
   (SUBPARTITION p21, SUBPARTITION p22, 
    SUBPARTITION p23, SUBPARTITION p24),
 PARTITION P3
   (SUBPARTITION p31, SUBPARTITION p32, 
    SUBPARTITION p33, SUBPARTITION p34),
 PARTITION P4
   (SUBPARTITION p41, SUBPARTITION p42, 
    SUBPARTITION p43, SUBPARTITION p44));

--圧縮
ALTER TABLE TAB_RANGE1 COMPRESS;

--圧縮して移動
ALTER TABLE TAB_RANGE1 MOVE PARTITION P2011Q1 COMPRESS;

--パーティション表領域移動
ALTER TABLE TAB_RANGE1 MOVE PARTITION P2011Q2 TABLESPACE SYSTEM;

--パーティションインデックス単位でインデックス移動
ALTER INDEX I_TAB_RANGE1_YYYYMMDD
 REBUILD PARTITION P2011Q1 TABLESPACE USERS;

--パーティション追加
ALTER TABLE TAB_RANGE1 ADD PARTITION P2012Q1 VALUES LESS THAN(TO_DATE('2012-04-01','YYYY-MM-DD'));

--パーティション削除
ALTER TABLE TAB_RANGE1 DROP PARTITION P2012Q1;

--パーティションTRUNCATE
ALTER TABLE TAB_RANGE1 TRUNCATE PARTITION P2011Q2;

--パーティション分割
ALTER TABLE TAB_RANGE1 SPLIT PARTITION P2011Q4 AT
 (TO_DATE('2011-10-02','YYYY-MM-DD')) INTO (PARTITION P4, PARTITION P5);

--パーティションマージ
ALTER TABLE TAB_RANGE1 MERGE PARTITIONS P4, P5 INTO PARTITION P2011Q4;

--パーティションリネーム
ALTER TABLE TAB_RANGE1 RENAME PARTITION P2011Q3 TO P2011Q3A;

--パーティションインデックスリビルド
ALTER INDEX I_TAB_RANGE1_YYYYMMDD
 REBUILD PARTITION P2011Q1;

--パーティションインデックス圧縮(索引を作成する時にCOMPRESS属性が指定されていないとORA-28659が発生する)
CREATE INDEX I_TAB_RANGE1_YYYYMMDD ON TAB_RANGE1 (YYYYMMDD) LOCAL COMPRESS;
ALTER INDEX I_TAB_RANGE1_YYYYMMDD
 REBUILD PARTITION P2011Q1 COMPRESS;

--パーティションを明示的に指定した検索
SELECT * FROM TAB_RANGE1 PARTITION(P2011Q1);

--MOVE等でUNUSABLEになった索引パーティションを有効化する
ALTER TABLE TAB_RANGE1 MODIFY PARTITION P2011Q1 REBUILD UNUSABLE LOCAL INDEXES;

--関連ディクショナリ
SELECT * FROM DBA_TAB_PARTITIONS;
SELECT * FROM DBA_TAB_SUBPARTITIONS;
SELECT * FROM DBA_IND_PARTITIONS;
SELECT * FROM DBA_IND_SUBPARTITIONS;
SELECT * FROM DBA_LOB_PARTITIONS;
SELECT * FROM DBA_LOB_SUBPARTITIONS;
SELECT * FROM DBA_PART_TABLES;
SELECT * FROM DBA_PART_INDEXES;
SELECT * FROM DBA_PART_LOBS;
SELECT * FROM DBA_PART_KEY_COLUMNS;
SELECT * FROM DBA_SUBPART_KEY_COLUMNS;
SELECT * FROM DBA_SUBPARTITION_TEMPLATES;


マニュアル

一覧(10.2)
リファレンス 10g リリース2(10.2)
SQL リファレンス 10g リリース2(10.2)
★ORACLE案件承ります