パーティションテーブルを作成した後、そのパーティションテーブルにパーティションを追加できます。
パーティションテーブルにおけるパーティション追加操作のサポート状況
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パーティションにパーティションを追加しても、グローバルインデックスとローカルインデックスの使用には影響しません。
- テンプレート型のサブパーティションテーブルにパーティションを追加する場合、パーティションの定義のみを指定すれば、サブパーティションの定義はテンプレートに従って自動的に埋め込まれます。
- V4.4.2バージョンでは、V4.4.2 BP2バージョンから、テンプレート型のサブパーティションテーブルにパーティションを追加する際に、追加するパーティションに対応するサブパーティションの定義を指定できるようになりました。これにより、テンプレート型とカスタム型のサブパーティションを組み合わせて使用できるようになりました。
一部の例:
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 affectedRange + Rangeパーティションのテンプレート型パーティションテーブルを作成し、その後パーティションを追加する際にカスタムサブパーティションを追加します。
テンプレート型テーブル
st_rrを作成します。obclient> CREATE TABLE st_rr (col1 INT, col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp1 VALUES LESS THAN(100), SUBPARTITION mp2 VALUES LESS THAN(200), SUBPARTITION mp3 VALUES LESS THAN(300) ) (PARTITION p0 VALUES LESS THAN(2020), PARTITION p1 VALUES LESS THAN(2021), PARTITION p2 VALUES LESS THAN(2022) );テーブル
st_rrにパーティションを追加し、サブパーティションを指定します。obclient> ALTER TABLE st_rr ADD PARTITION p3 VALUES LESS THAN(2026) (SUBPARTITION p3sp0 VALUES LESS THAN(300), SUBPARTITION p3sp1 VALUES LESS THAN(600));テーブル
st_rrの定義を確認します。obclient> SHOW CREATE TABLE st_rr;実行結果は次のとおりです:
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TABLE | CREATE TABLE | +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ST_RR | CREATE TABLE "ST_RR" ( "COL1" NUMBER(*,0), "COL2" NUMBER(*,0) ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range("COL1") subpartition by range("COL2") subpartition template ( subpartition "MP1" values less than (100), subpartition "MP2" values less than (200), subpartition "MP3" values less than (300)) (partition "P0" values less than (2020), partition "P1" values less than (2021), partition "P2" values less than (2022), partition "P3" values less than (2026) ( subpartition "P3SP0" values less than (300), subpartition "P3SP1" values less than (600))) | +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set
非テンプレート型サブパーティションテーブルにパーティションを追加する
非テンプレート型サブパーティションテーブルにパーティションを追加する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