テーブルグループを作成した後、条件に合致するテーブルをそのテーブルグループに追加できます。
使用上の制限
OceanBaseデータベースのアップグレード中は、ALTER TABLEGROUPステートメントを使用してテーブルグループにテーブルを追加することは禁止されています。
注意事項
パーティション重みを持つテーブルはテーブルグループに追加できますが、追加後はテーブルグループ全体の分散に影響を与える可能性があります。パーティション重みを持つテーブルをテーブルグループに追加した場合の元のテーブルグループへの具体的な影響は、次の表のとおりです。
テーブルグループのSHARDINGプロパティ |
元のパーティション分布方式 |
パーティション重み付け後の影響 |
|---|---|---|
| NONE | 全部集約 | 影響なし |
| PARTITION | 各テーブルのパーティション単位でValueが同じパーティションを集約(同一パーティショングループ)、パーティション単位で分散。 | 重み付けされた少数のパーティションがテーブルグループ全体の分布に影響します。 |
| 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';パーティション定義が同じテンプレート型サブパーティションテーブル
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