テーブルグループを作成した後、条件に合致するテーブルをテーブルグループに追加できます。
制限事項
OceanBaseデータベースのアップグレード中は、ALTER TABLEGROUP ステートメントを使用してテーブルグループにテーブルを追加することは禁止されています。
前提条件
テーブルをテーブルグループに追加する前に、テーブルグループのプロパティおよびテーブルグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作については、テーブルグループ情報の表示を参照してください。
所属するテーブルグループを指定する場合、作成予定のテーブルはそのテーブルグループへの追加条件を満たしている必要があります。
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';2つのパーティション定義が同一のパーティションテーブル
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