テーブルグループを作成した後、条件に合致するテーブルをそのテーブルグループに追加できます。
使用上の制限
OceanBaseデータベースのアップグレード中は、ALTER TABLEGROUP ステートメントを使用してテーブルグループにテーブルを追加することは禁止されています。
注意事項
パーティション重みを持つテーブルはテーブルグループに追加できますが、追加後はテーブルグループ全体の分散に影響を与える可能性があります。パーティション重みを持つテーブルをテーブルグループに追加した場合の元のテーブルグループへの具体的な影響は、次の表のとおりです。
テーブルグループの SHARDING プロパティ |
元のパーティション分散方式 |
パーティション重みを考慮した影響 |
|---|---|---|
| NONE | 全部集約 | 影響なし |
| PARTITION | 各テーブルのパーティション内で値が同じパーティションを集約(同一パーティショングループ)、パーティション間は分散。 | 重量を持つ少数のパーティションがテーブルグループ全体の分散に影響を与える。 |
| ADAPTIVE |
|
テーブルグループ内がすべてパーティションテーブルの場合、重量を持つ少数のパーティションがテーブルグループ全体の分散に影響を与える。現在、サブパーティションテーブルに対するパーティション重みの設定はサポートされていないため、テーブルグループ内がすべてサブパーティションテーブルの場合は対象外となる。 |
前提条件
テーブルをテーブルグループに追加する前に、テーブルグループのプロパティおよびテーブルグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作については、テーブルグループ情報の表示を参照してください。
所属するテーブルグループを指定する場合、作成予定のテーブルはそのテーブルグループへの追加条件を満たしている必要があります。
SHARDINGプロパティがNONEのテーブルグループについては、作成予定のテーブルに制限はありません。テーブルグループ内には、非パーティションテーブル、パーティションテーブル、サブパーティションテーブルを同時に含めることができます。説明
SHARDING = 'NONE'プロパティのテーブルグループにテーブルを追加する際、そのテーブルにグローバルインデックスがある場合、システムはパフォーマンス向上のため、自動的にグローバルインデックスをそのテーブルグループにバインドします。グローバルインデックスの詳細については、グローバルインデックスを参照してください。SHARDINGプロパティがPARTITIONのテーブルグループについては、作成予定のテーブルの対応するパーティションは、テーブルグループ内のすべてのテーブルのパーティション定義(パーティションタイプ、パーティション数、パーティション値)と一致している必要があります。テーブルグループ内には、パーティションテーブルとサブパーティションテーブルを同時に含めることができます。また、テーブルグループ内がすべて非パーティションテーブルである場合もサポートされています。同一のパーティション定義とは具体的には以下のことを指します:
- パーティションタイプが同じであること。例えば、どちらもRangeパーティションであること。
- Hashパーティションの場合、参照する列数が同じで、パーティション数も同じであること。
- Rangeパーティションの場合、参照する列数が同じで、パーティション数が同じで、Range分割点も同じであること。
SHARDINGプロパティがADAPTIVEのテーブルグループについては、作成予定のテーブルの対応するパーティションとサブパーティションは、テーブルグループ内のすべてのテーブルのパーティションとサブパーティションの定義(パーティションタイプ、パーティション数、パーティション値)と一致している必要があります。テーブルグループは、すべてパーティションテーブルまたはすべてサブパーティションテーブルである必要があります。また、テーブルグループ内がすべて非パーティションテーブルである場合もサポートされています。同一のパーティション定義とは具体的には以下のことを指します:
- パーティションタイプが同じであること(例えば、どちらもHash + Rangeパーティションであること)。
- Hashパーティションの場合、参照する列数が同じで、パーティション数も同じであること。
- Rangeパーティションの場合、参照する列数が同じで、パーティション数が同じで、Range分割点も同じであること。
- サブパーティションの場合、そのパーティションタイプに基づき、パーティションと同じ要件が適用されます。
テーブル作成時のテーブルグループへの割り当て
テーブルグループを作成した後、テーブルがまだ作成されていない場合は、テーブル作成時にテーブルグループを指定することで、そのテーブルをテーブルグループに割り当てることができます。ステートメントは以下のとおりです。
CREATE TABLE table_name column_definition TABLEGROUP = tablegroup_name [partition_option];
ステートメントの使用方法:
column_definition:テーブルの列名とデータ型を定義します。TABLEGROUP:テーブルが属するテーブルグループを指定します。partition_option:テーブルのパーティション情報を定義します。
テーブルの作成とテーブルグループへの追加の例は以下のとおりです:
テーブルを
SHARDINGプロパティがNONEのテーブルグループに追加します。SHARDINGプロパティがNONEのテーブルグループtblgroup1を作成します。CREATE TABLEGROUP tblgroup1 SHARDING = 'NONE';非パーティションテーブル
tbl1を作成し、テーブルグループtblgroup1に追加します。CREATE TABLE tbl1 (col NUMBER) TABLEGROUP = tblgroup1;パーティションテーブル
tbl2を作成し、テーブルグループtblgroup1に追加します。CREATE TABLE tbl2(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup1 PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブルグループ内のテーブルを確認します。
SELECT * FROM SYS.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TBLGROUP1';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | TBLGROUP1 | SYS | TBL1 | NONE | | TBLGROUP1 | SYS | TBL2 | NONE | +-----------------+-------+------------+----------+ 2 rows in set
テーブルを
SHARDINGプロパティがPARTITIONのテーブルグループに追加します。SHARDINGプロパティがPARTITIONのテーブルグループtblgroup2を作成します。CREATE TABLEGROUP tblgroup2 SHARDING = 'PARTITION';パーティションテーブル
tbl3を作成し、テーブルグループtblgroup2に追加します。CREATE TABLE tbl3(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup2 PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブル
tbl3とパーティションタイプ、パーティション数、パーティション値がすべて同じテーブルtbl4を作成し、テーブルグループtblgroup2に追加します。CREATE TABLE tbl4(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup2 PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブルグループ内のテーブルを確認します。
SELECT * FROM SYS.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TBLGROUP2';結果は次のとおりです:
+-----------------+-------+------------+-----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+-----------+ | TBLGROUP2 | SYS | TBL3 | PARTITION | | TBLGROUP2 | SYS | TBL4 | PARTITION | +-----------------+-------+------------+-----------+ 2 rows in set
テーブルを作成し、
SHARDING属性がADAPTIVEのテーブルグループに追加します。SHARDING属性がADAPTIVEのテーブルグループtblgroup3を作成します。CREATE TABLEGROUP tblgroup3 SHARDING = 'ADAPTIVE';模板化されたサブパーティションテーブル
tbl5を作成し、テーブルグループtblgroup3に追加するよう指定します。CREATE TABLE tbl5(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup3 PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('01'), SUBPARTITION mp1 VALUES('02'), SUBPARTITION mp2 VALUES('03') ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブル
tbl5とパーティションタイプ、パーティション数、パーティション値がすべて同じテーブルtbl6を作成し、テーブルグループtblgroup3に追加するよう指定します。CREATE TABLE tbl6(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup3 PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('01'), SUBPARTITION mp1 VALUES('02'), SUBPARTITION mp2 VALUES('03') ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブルグループ内のテーブルを確認します。
SELECT * FROM SYS.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TBLGROUP3';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | TBLGROUP3 | SYS | TBL5 | ADAPTIVE | | TBLGROUP3 | SYS | TBL6 | ADAPTIVE | +-----------------+-------+------------+----------+ 2 rows in set
表組に既存のテーブルを追加する
表組を作成した後、テーブルが既に存在し、かつ表組への加入条件を満たしている場合は、ALTER TABLEGROUP ステートメントを使用して表組にテーブルを追加できます。ステートメントは以下のとおりです。
ALTER TABLEGROUP tablegroup_name ADD [TABLE] table_name [, table_name...];
ステートメントの使用方法:
tablegroup_name:追加するテーブルの表組。table_name:追加するテーブル。複数のテーブルを同時に追加する場合は、異なるテーブル名を半角カンマ(,)で区切ります。複数のテーブルを追加する場合、テーブル名の重複は許可されます。追加するテーブルが既に現在の表組に存在する場合、システムはエラーを報告しません。
表組に既存のテーブルを追加する例:
既存のテーブルを
SHARDINGプロパティがNONEの表組に追加します。SHARDINGプロパティがNONEの表組tblgroup4を作成します。CREATE TABLEGROUP tblgroup4 SHARDING = 'NONE';非パーティションテーブル
tbl7とテンプレートパーティションテーブルtbl8を作成します。CREATE TABLE tbl7 (col NUMBER);CREATE TABLE tbl8(col1 NUMBER,col2 VARCHAR2(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('01'), SUBPARTITION mp1 VALUES('02'), SUBPARTITION mp2 VALUES('03') ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブル
tbl7とtbl8を同時に表組tblgroup4に追加します。ALTER TABLEGROUP tblgroup4 ADD tbl7,tbl8;表組内のテーブルを確認します。
SELECT * FROM SYS.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TBLGROUP4';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | TBLGROUP4 | SYS | TBL7 | NONE | | TBLGROUP4 | SYS | TBL8 | NONE | +-----------------+-------+------------+----------+ 2 rows in set
既存のテーブルを
SHARDINGプロパティがPARTITIONの表組に追加します。SHARDINGプロパティがPARTITIONの表組tblgroup5を作成します。CREATE TABLEGROUP tblgroup5 SHARDING = 'PARTITION';パーティション定義が同じパーティションテーブル
tbl9とtbl10を作成します。CREATE TABLE tbl9(col1 NUMBER,col2 VARCHAR2(50)) PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );CREATE TABLE tbl10(col1 NUMBER,col2 VARCHAR2(50)) PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブル
tbl9とtbl10を同時にテーブルグループtblgroup5に追加します。ALTER TABLEGROUP tblgroup5 ADD tbl9,tbl10;テーブルグループ内のテーブルを確認します。
SELECT * FROM SYS.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TBLGROUP5';結果は次のとおりです:
+-----------------+-------+------------+-----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+-----------+ | TBLGROUP5 | SYS | TBL9 | PARTITION | | TBLGROUP5 | SYS | TBL10 | PARTITION | +-----------------+-------+------------+-----------+ 2 rows in set
既存のテーブルを
SHARDING属性がADAPTIVEのテーブルグループに追加します。SHARDING属性がADAPTIVEのテーブルグループtblgroup6を作成します。CREATE TABLEGROUP tblgroup6 SHARDING = 'ADAPTIVE';2つのパーティション定義が同じ、テンプレート化されたサブパーティションテーブル
tbl11とtbl12を作成します。CREATE TABLE tbl11(col1 NUMBER,col2 VARCHAR2(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('01'), SUBPARTITION mp1 VALUES('02'), SUBPARTITION mp2 VALUES('03') ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );CREATE TABLE tbl12(col1 NUMBER,col2 VARCHAR2(50)) PARTITION BY LIST(col1) SUBPARTITION BY LIST(col2) SUBPARTITION TEMPLATE (SUBPARTITION mp0 VALUES('01'), SUBPARTITION mp1 VALUES('02'), SUBPARTITION mp2 VALUES('03') ) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブル
tbl11とtbl12を同時にテーブルグループtblgroup6に追加します。ALTER TABLEGROUP tblgroup6 ADD tbl11,tbl12;テーブルグループ内のテーブルを確認します。
SELECT * FROM SYS.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TBLGROUP6';結果は次のとおりです:
+-----------------+-------+------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+------------+----------+ | TBLGROUP6 | SYS | TBL11 | ADAPTIVE | | TBLGROUP6 | SYS | TBL12 | ADAPTIVE | +-----------------+-------+------------+----------+ 2 rows in set