このトピックでは、既存のパーティションテーブルにパーティションとサブパーティションを追加する方法について説明します。
構文
ALTER TABLE... ADD PARTITIONステートメントを使用して、既存のパーティションテーブルにパーティションとサブパーティションを追加できます。
ALTER TABLE table_name ADD PARTITION partition_definition;partition_definition:
{list_partition | range_partition | hash_partition | key_partition}list_partition:
PARTITION [partition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]
(subpartition, ...)range_partition:
PARTITION partition_name
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
[(subpartition, ...)]hash_partitionまたはkey_partition:
PARTITION partition_name
[TABLESPACE tablespace_name]
(subpartition, ...)subpartition:
{list_subpartition | range_subpartition | hash_partition | key_partition}list_subpartition:
SUBPARTITION [subpartition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]range_subpartition:
SUBPARTITION [subpartition_name ]
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]hash_partitionまたはkey_subpartition:
SUBPARTITION [subpartition_name ]
[TABLESPACE tablespace_name]パラメーター
パラメーター | 説明 |
table_name | パーティション分割されたテーブルの名前。スキーマ修飾できます。 |
partition_name | パーティションの名前。 パーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。 |
subpartition_name | サブパーティションの名前。 サブパーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。 |
(value[, value]...) |
|
tablespace_name | パーティションまたはサブパーティションが存在するテーブルスペースの名前。 |
使用上の注意
ALTER TABLE... ADD PARTITIONステートメントは、既存のパーティションテーブルにパーティションとサブパーティションを追加するために使用します。 パーティションテーブルがサブパーティションになっていることを確認します。 新しいパーティションとサブパーティションは、パーティションテーブルの既存のパーティションとサブパーティションと同じ型である必要があります。 新しいパーティションのパーティション分割ルールは、既存のパーティションを定義するパーティション分割ルールで指定された同じ列を参照する必要があります。
テーブルスペース (新しいサブパーティションが属するテーブルスペースを含む) を指定しない場合、サブパーティションはデフォルトのテーブルスペースに作成されます。
パーティションテーブルがインデックス付けされている場合、インデックスは新しいサブパーティションに作成されます。
例
範囲パーティションを定義するときは、パーティションキー値の昇順でパーティションを並べます。 RANGEパーティションテーブルの既存のパーティションの前に新しいパーティションを追加することはできません。
sales_range_rangeという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。rangeでパーティション分割され、さらにRANGEでサブパーティション分割される
sales_range_RANGEという名前のテーブルを作成します。CREATE TABLE sales_range_range ( dept_no INT, part_no INT, country varchar(20), date DATE, amount INT ) PARTITION BY RANGE(dept_no) SUBPARTITION BY RANGE(part_no) ( PARTITION p0 VALUES LESS THAN (1000) ( SUBPARTITION s0 VALUES LESS THAN(100), SUBPARTITION s1 VALUES LESS THAN(200), SUBPARTITION s2 VALUES LESS THAN(300), SUBPARTITION s3 VALUES LESS THAN(MAXVALUE) ) );ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_range_rangeパーティションテーブルに追加します。ALTER TABLE sales_range_range ADD PARTITION ( PARTITION p_2015 VALUES less than (2016) ( SUBPARTITION q1_2015 VALUES LESS THAN(4), SUBPARTITION q2_2015 VALUES LESS THAN(7), SUBPARTITION q3_2015 VALUES LESS THAN(10), SUBPARTITION q4_2015 VALUES LESS THAN(13) ) );
sales_list_rangeという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。LISTでパーティション分割され、さらにrangeでサブパーティション分割された
sales_list_RANGEという名前のパーティションテーブルを作成します。CREATE TABLE sales_list_range ( dept_no INT, part_no INT, country varchar(20), date DATE, amount INT ) PARTITION BY LIST (dept_no) SUBPARTITION BY RANGE(amount) ( PARTITION p0 VALUES in (1, 2)( SUBPARTITION s0 VALUES LESS THAN(1000), SUBPARTITION s1 VALUES LESS THAN(2000), SUBPARTITION s2 VALUES LESS THAN(3000), SUBPARTITION s3 VALUES LESS THAN(MAXVALUE) ) );ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_list_rangeパーティションテーブルに追加します。ALTER TABLE sales_list_range ADD PARTITION ( PARTITION p3 VALUES in (7, 8)( SUBPARTITION q1_2015 VALUES LESS THAN(4), SUBPARTITION q2_2015 VALUES LESS THAN(7), SUBPARTITION q3_2015 VALUES LESS THAN(10), SUBPARTITION q4_2015 VALUES LESS THAN(13) ) );
sales_hash_hashという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。hashでパーティション分割され、さらにHASHでパーティション分割される
sales_hash_hashという名前のパーティションテーブルを作成します。CREATE TABLE sales_hash_hash ( dept_no INT, part_no INT, country varchar(20), date DATE, amount INT ) PARTITION BY HASH(dept_no) PARTITIONS 9 SUBPARTITION BY HASH(part_no) SUBPARTITIONS 3 ;ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_hash_hashパーティション分割テーブルに追加します。ALTER TABLE sales_hash_hash ADD PARTITION ( PARTITION m3( SUBPARTITION d6, SUBPARTITION d7, SUBPARTITION d8 ) );
sales_key_keyという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。keyでパーティション分割され、さらにKEYでパーティション分割される
sales_key_keyという名前のパーティションテーブルを作成します。CREATE TABLE sales_key_key ( dept_no varchar(20), part_no varchar(20), country varchar(20), date DATE, amount INT ) PARTITION BY KEY(dept_no) PARTITIONS 3 SUBPARTITION BY KEY(part_no) SUBPARTITIONS 2;ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_key_keyパーティション分割テーブルに追加します。ALTER TABLE sales_key_key ADD PARTITION ( PARTITION m3( SUBPARTITION d6, SUBPARTITION d7 ) );