パーティションテーブルを作成した後、そのテーブルにパーティションを追加できます。
パーティションテーブルにおけるパーティション追加操作のサポート状況
OceanBaseデータベースのOracleモードでは:
パーティションテーブルについては、現在RangeパーティションとListパーティションに対してのみパーティションの追加操作をサポートしており、Hashパーティションへの追加操作は現在サポートされていません。
サブパーティションテーブルについては、現在Range/Listタイプ(組み合わせ)のパーティションに対してのみパーティションの追加操作をサポートしています。
OceanBaseデータベースのOracleモードにおける、パーティションテーブルとサブパーティションテーブルのパーティション追加操作に関するサポート状況は、次の表のとおりです。
パーティションテーブル |
パーティションタイプ |
パーティションの追加 |
サブパーティションの追加 |
|---|---|---|---|
| パーティションテーブル | Range / List | サポート | - |
| パーティションテーブル | Hash | サポートなし | - |
| サブパーティションテーブル | Range + Range / Range + List | サポート | サポート |
| サブパーティションテーブル | Range + Hash | サポート | サポートなし |
| サブパーティションテーブル | List + Range / List + List | サポート | サポート |
| サブパーティションテーブル | List + Hash | サポート | サポートなし |
| サブパーティションテーブル | Hash + Range / Hash + List | サポートなし | サポート |
| サブパーティションテーブル | Hash + Hash | サポートなし | サポートなし |
パーティションの追加
パーティションテーブル、スキーマテンプレートを持つサブパーティションテーブル、およびスキーマテンプレートを持たないサブパーティションテーブルにパーティションを追加できます。
パーティションテーブルとテンプレート型サブパーティションテーブルにパーティションを追加する
パーティションテーブルとテンプレート型サブパーティションテーブルにパーティションを追加するSQL構文は以下のとおりです:
ALTER TABLE table_name ADD PARTITION partition_option;
partition_option:
range_partition_option | list_partition_option
range_partition_option:
partition_name VALUES LESS THAN partition_expr
list_partition_option:
partition_name VALUES partition_expr
説明
Rangeパーティションでは、最大のパーティションの後にのみパーティションを追加でき、途中または開始位置には追加できません。現在のパーティションに
MAXVALUEのパーティションが含まれている場合は、パーティションの追加を続けることはできません。Listパーティションにパーティションを追加する際は、追加するパーティションが前のパーティションと競合しない必要があります。Listパーティションにデフォルトパーティション、すなわち
Default Partitionがある場合は、いかなるパーティションも追加できません。Range/Listパーティションにパーティションを追加しても、グローバルインデックスとローカルインデックスの使用には影響しません。
テンプレート型サブパーティションテーブルにパーティションを追加する場合、パーティションの定義のみを指定する必要があります。サブパーティションの定義は、テンプレートに従って自動的に埋め込まれます。
一部の例は以下のとおりです:
Rangeパーティションのパーティションテーブル
tbl1_rを作成し、パーティションM202006を追加します。obclient> CREATE TABLE tbl1_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE) PARTITION BY RANGE(log_date) (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD')) , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD')) , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD')) , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD')) , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD')) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_r ADD PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD')); Query OK, 0 rows affectedListパーティションのパーティションテーブル
tbl1_lを作成し、パーティションp4を追加します。obclient> CREATE TABLE tbl1_l(log_id INT,log_value VARCHAR2(20)) PARTITION BY LIST(log_value) (PARTITION p1 VALUES ('A'), PARTITION p2 VALUES ( 'B' ), PARTITION p3 VALUES ( 'C' ) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_l ADD PARTITION p4 VALUES('D'); Query OK, 0 rows affectedRange + Rangeパーティションのテンプレート型サブパーティションテーブル
t2_m_rrを作成し、さらにパーティションp2を追加します。obclient> CREATE TABLE t2_m_rr(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES LESS THAN(2020), SUBPARTITION mp1 VALUES LESS THAN(2021), SUBPARTITION mp2 VALUES LESS THAN(2022) ) (PARTITION p0 VALUES LESS THAN(100), PARTITION p1 VALUES LESS THAN(200) ); Query OK, 0 rows affected obclient> ALTER TABLE t2_m_rr ADD PARTITION p2 VALUES LESS THAN(300); Query OK, 0 rows affected
非テンプレート型サブパーティションテーブルにパーティションを追加する
非テンプレート型サブパーティションテーブルにパーティションを追加するSQL構文は次のとおりです:
ALTER TABLE table_name ADD PARTITION partition_option (subpartition_option);
partition_option:
range_partition_option | list_partition_option
range_partition_option:
partition_name VALUES LESS THAN partition_expr
list_partition_option:
partition_name VALUES partition_expr
subpartition_option:
{SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr, ...}
|{SUBPARTITION subpartition_name VALUES list_partition_expr, ....}
|{SUBPARTITION subpartition_name, ....}
説明
非テンプレート型サブパーティションテーブルにパーティションを追加する場合、パーティションの定義と、そのパーティションの下に作成されるサブパーティションの定義を同時に指定する必要があります。
Range + Rangeパーティションを持つ非テンプレート型サブパーティションテーブルt2_f_rrを作成し、そこにパーティションp2を追加する例を以下に示します:
obclient> CREATE TABLE t2_f_rr(col1 INT,col2 INT)
PARTITION BY RANGE(col1)
SUBPARTITION BY RANGE(col2)
(PARTITION p0 VALUES LESS THAN(100)
(SUBPARTITION sp0 VALUES LESS THAN(2020),
SUBPARTITION sp1 VALUES LESS THAN(2021)
),
PARTITION p1 VALUES LESS THAN(200)
(SUBPARTITION sp2 VALUES LESS THAN(2020),
SUBPARTITION sp3 VALUES LESS THAN(2021),
SUBPARTITION sp4 VALUES LESS THAN(2022)
)
);
Query OK, 0 rows affected
obclient> ALTER TABLE t2_f_rr ADD PARTITION p2 VALUES LESS THAN(300)
(SUBPARTITION sp5 VALUES LESS THAN(2020),
SUBPARTITION sp6 VALUES LESS THAN(2021),
SUBPARTITION sp7 VALUES LESS THAN(2022)
);
Query OK, 0 rows affected
サブパーティションの追加
OceanBaseデータベースのOracleモードは、現在、非テンプレートのサブパーティションテーブルにのみサブパーティションの追加をサポートしています。
構文
ALTER TABLE table_name MODIFY PARTITION partition_name ADD subpartition_list;
subpartition_list:
{SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr, ...}
| {SUBPARTITION subpartition_name VALUES list_partition_expr, ...}
パラメータの説明
パラメータ |
説明 |
|---|---|
| table_name | テーブル名を指定します。 |
| partition_name | 追加するサブパーティションが属するパーティション名を指定します。 |
| subpartition_name | 追加するサブパーティションの名前を指定します。 |
例
Range + Rangeパーティションの非テンプレートサブパーティションテーブルt2_f_rrを作成し、パーティションp1にサブパーティションsp5とsp6を追加します。
obclient> CREATE TABLE t2_f_rr(col1 INT,col2 INT)
PARTITION BY RANGE(col1)
SUBPARTITION BY RANGE(col2)
(PARTITION p0 VALUES LESS THAN(100)
(SUBPARTITION sp0 VALUES LESS THAN(2020),
SUBPARTITION sp1 VALUES LESS THAN(2021)
),
PARTITION p1 VALUES LESS THAN(200)
(SUBPARTITION sp2 VALUES LESS THAN(2020),
SUBPARTITION sp3 VALUES LESS THAN(2021),
SUBPARTITION sp4 VALUES LESS THAN(2022)
)
);
Query OK, 0 rows affected
obclient> ALTER TABLE t2_f_rr MODIFY PARTITION p1 ADD
SUBPARTITION sp5 VALUES LESS THAN(2023),
SUBPARTITION sp6 VALUES LESS THAN(2024);
Query OK, 0 rows affected