Gblog

おもにTips

パーティションの CREATE 文

  当然、そらでかけるわけもなく。

  • レンジ
CREATE  TABLE tab1 
  ( col1 CHAR(2),
    col2 VARCHAR2(100),
    CONSTRAINT tab1_pk PRIMARY KEY(col1)
  )
  PARTITION BY RANGE( col1 )
    ( PARTITION tab1_part1 VALUES LESS THAN ('10'),
      PARTITION tab1_part2 VALUES LESS THAN ('20'),
      PARTITION tab1_part3 VALUES LESS THAN ('30'),
      PARTITION tab1_part4 VALUES LESS THAN ('40')
    );

 

  • ハッシュ
CREATE  TABLE tab1 
  ( col1 CHAR(2),
    col2 VARCHAR2(100),
    CONSTRAINT tab1_pk PRIMARY KEY(col1)
  )
  PARTITION BY hash ( col1 )
  PARTITIONs 4;

ハッシュで名前を指定するときは

CREATE  TABLE tab1 
  ( col1 CHAR(2),
    col2 VARCHAR2(100),
    CONSTRAINT tab1_pk PRIMARY KEY(col1)
  )
  PARTITION BY hash ( col1 )
    ( PARTITION tab1_part1 ,
      PARTITION tab1_part2 ,
      PARTITION tab1_part3 ,
      PARTITION tab1_part4
    );

 

  • リスト
CREATE  TABLE tab1
  ( col1 CHAR(2),
    col2 VARCHAR2(100),
    CONSTRAINT tab1_pk PRIMARY KEY(col1)
  )
  PARTITION BY list ( col1 )
    ( PARTITION tab1_part1 values ('00','01'),
      PARTITION tab1_part2 values ('02','03'),
      PARTITION tab1_part3 values ('04','05'),
      PARTITION tab1_part4 values (default)
    );

 

  • インターバル
    よくわかってないけど。
CREATE  TABLE tab1 
  ( col1 CHAR(2),
    col2 date,
    col3 VARCHAR2(100),
    CONSTRAINT tab1_pk PRIMARY KEY(col1)
  )
  PARTITION BY RANGE (col2)
  interval(numtoyminterval(1, 'month'));
    ( PARTITION tab1_part1
        VALUES LESS THAN (to_date('20080101', 'yyyymmdd'))
    );

インターバルパーティションは、パーティションをを 1つ以上指定してあげないといけない模様。インターバールパーティションだと、未来のパーティションは作成されるので指定はいらないが、過去のものは指定できないようで、1つのパーティションを起点として作成するみたい。

 

索引のパーティションも。

LOCALで作る場合は、パーティションの指定は必須ではありませんっが、GLOBAL だと任意で切らないといけないので。

 

  • レンジ(索引)
CREATE INDEX ind1 ON tab1(col2) GLOBAL 
  PARTITION BY RANGE(col2)
    ( PARTITION ind1_part1 VALUES LESS THAN ('10'),
      PARTITION ind1_part2 VALUES LESS THAN ('20'),
      PARTITION ind1_part3 VALUES LESS THAN ('30'),
      PARTITION ind1_part4 VALUES LESS THAN (maxvalue)
    );

 

  • ハッシュ(索引)
CREATE INDEX ind1 ON tab1(col2) GLOBAL 
  PARTITION BY HASH (col2)
  PARTITIONS 4;

 

  • リスト(索引)
    以下のエラーで作成できませんでした。
ORA-14151: 表パーティション化メソッドが無効です

 

うーん、パーティションは謎が深い。。。

ちなみに、11.2.0.4 で確認しています。