テーブルグループを作成した後、ビジネスの調整に応じて、その属性を変更できます。
使用上の制限
- OceanBaseデータベースのアップグレード中は、テーブルグループ属性の変更を禁じます。
- このステートメントを実行するには、現在のユーザーがグローバルな
ALTER権限を持っていることを確認する必要があります。
変更ルール
テーブルグループのSHARDING属性を変更する際は、まずテーブルグループ内にテーブルが存在するかどうか、およびテーブルのパーティション情報を確認する必要があります。テーブルグループ内のテーブルの詳細な操作については、テーブルグループ情報の確認を参照してください。
テーブルグループ内にテーブルがない場合は、
SHARDING属性を任意に変更できます。テーブルグループ内にテーブルがある場合は、以下の変更ルールに従う必要があります:
テーブルグループの
SHARDING属性をNONEに変更する場合、テーブルグループ内のテーブルのパーティション定義を考慮する必要はなく、直接変更できます。テーブルグループの
SHARDING属性をPARTITIONに変更する場合:- テーブルグループ内のすべてのテーブルが非パーティションテーブルの場合、直接変更できます。
- テーブルグループ内に非パーティションテーブルとパーティションテーブルが混在する場合、変更できません。
- テーブルグループ内にパーティションテーブルまたはサブパーティションテーブルが1種類のみ存在する場合、テーブルグループ内のすべてのテーブルのパーティションタイプ、パーティション数、パーティション値が同じである必要があります。同じでない場合、変更できません。
テーブルグループの
SHARDING属性をADAPTIVEに変更する場合:- テーブルグループ内のすべてのテーブルが非パーティションテーブルの場合、直接変更できます。
- テーブルグループ内に非パーティションテーブルとパーティションテーブルが混在する場合、変更できません。
- テーブルグループ内にパーティションテーブルとサブパーティションテーブルが混在する場合、変更できません。
- テーブルグループ内のすべてのテーブルがパーティションテーブルの場合、すべてのパーティションテーブルのパーティションタイプ、パーティション数、パーティション値が同じである必要があります。
- テーブルグループ内のすべてのテーブルがサブパーティションテーブルの場合、すべてのパーティションテーブルとサブパーティションテーブルのパーティションタイプ、パーティション数、パーティション値が同じである必要があります。
V4.4.2 BP1以降のバージョンでテーブルグループ属性を変更する場合は、
SHARDINGとSCOPEの以下の組み合わせも満たす必要があります:説明
V4.4.2バージョンでは、V4.4.2 BP1バージョンからテーブルグループの
SCOPE属性がサポートされています。SHARDING = 'NONE'+SCOPE = 'SERVER'SHARDING = 'NONE'+SCOPE = 'ZONE'SHARDING = 'NONE'+SCOPE = 'CLUSTER'SHARDING = 'PARTITION'+SCOPE = 'CLUSTER'SHARDING = 'ADAPTIVE'+SCOPE = 'CLUSTER'
構文
テーブルグループのプロパティを変更するSQLステートメントは以下のとおりです:
ALTER TABLEGROUP tablegroup_name
[sharding_option,]
[scope_option];
table_name_list:
table_name [, table_name ...]
sharding_option:
SHARDING = '{NONE | PARTITION | ADAPTIVE}'
scope_option:
SCOPE = '{SERVER | ZONE | CLUSTER}'
パラメータ説明:
tablegroup_name:変更対象のテーブルグループ名。sharding_option:テーブルグループのSHARDINGプロパティを変更するために使用します。SHARDINGは、テーブルグループ内の各テーブル間で対応するパーティションを集約する方法を決定します。集約された一連のパーティションをPartition Group(パーティショングループ)と呼び、これが分散の最小単位です。取り得る値は以下のとおりです:NONE:テーブルグループに追加される各テーブルのパーティショニング方法に制限がなく、テーブル間でパーティションを集約しないことを示します。V4.4.2 BP1 より前のバージョンでは、NONEの意味にはすべてのパーティションが同一のログストリーム上にあり、分散されないことも含まれていました。新しいバージョンではこの意味は削除され、具体的に分散されるかどうかはSCOPEプロパティに依存します。- パーティションテーブルの場合:各パーティションが独立した Partition Group となります。
- サブパーティションテーブルの場合:各サブパーティションが独立した Partition Group となります。
- 非パーティションテーブルの場合:テーブル全体が 1 つの Partition Group となります。
- グローバルインデックス:非パーティションテーブルは 1 つのパーティションと見なされ、各パーティションが 1 つの Partition Group となります。
PARTITION:テーブルグループ全体が 1 つの Balance Group となり、同一のパーティションインデックスのパーティションが同一の Partition Group に集約されます。テーブルグループに追加されるすべてのテーブルの対応するパーティションは、テーブルグループ内のすべてのテーブルのパーティションとパーティション定義が一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。同一のパーティション定義とは具体的には以下を指します:- パーティションタイプが同じであること。例えば、どちらも Range パーティションであること。
- Hash パーティションの場合、参照する列数とパーティション数が同じであること。
- Range パーティションの場合、参照する列数、パーティション数、Range 分割点がすべて同じであること。
ADAPTIVE:デフォルト値です。テーブルグループに追加されるすべてのテーブルの対応するパーティションとサブパーティションは、テーブルグループ内のすべてのテーブルのパーティションとサブパーティションの定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。- すべてがパーティションテーブルの場合:テーブルグループ全体が 1 つの Balance Group となり、同一のパーティションインデックスのパーティションが同一の Partition Group に集約されます。
- すべてがサブパーティションテーブルの場合:同一のパーティションインデックスが 1 つの均衡グループとなり、その均衡グループ内で同一のサブパーティションインデックスを持つサブパーティションが同一の Partition Group に集約されます。
同一のパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること。例えば、どちらも Hash + Range パーティションであること。
- Hash パーティションの場合、参照する列数とパーティション数が同じであること。
- Range パーティションの場合、参照する列数、パーティション数、Range 分割点がすべて同じであること。
- サブパーティションの場合、そのパーティションタイプに基づき、パーティションと同じ要件が適用されます。
scope_option:オプションです。テーブルグループのSCOPEプロパティを指定するために使用します。SCOPEは、テーブルグループ内のすべての集約された Partition Group の分散範囲を決定します。取り得る値は以下のとおりです:SERVER:すべての Partition Group の Leader が同一ノード上に集約されることを示します。ZONE:すべての Partition Group の Leader が同一 Zone 内に分散され、Zone 内の各ノードに配置されることを示します。CLUSTER:すべての Partition Group の Leader がクラスタ内の各ノードに分散されることを示します。
説明
V4.4.2 バージョンでは、V4.4.2 BP1 バージョンからテーブルグループの
SCOPEプロパティがサポートされています。
例
例1:SHARDING = 'PARTITION' のテーブルグループ属性を変更する
注意
この例はV4.4.2 BP1以前のバージョンに適用されます。
SHARDING属性をPARTITIONに設定したテーブルグループtblgroup1を作成します。CREATE TABLEGROUP tblgroup1 SHARDING = 'PARTITION';パーティション定義が同じパーティションテーブル
tbl1とtbl2を2つ作成し、テーブルグループtblgroup1に追加します。CREATE TABLE tbl1(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup1 PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );CREATE TABLE tbl2(col1 NUMBER,col2 VARCHAR2(50)) TABLEGROUP = tblgroup1 PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブルグループ
tblgroup1のSHARDING属性をADAPTIVEに変更します。ALTER TABLEGROUP tblgroup1 SHARDING = 'ADAPTIVE';テーブルグループ属性を確認します。
SHOW TABLEGROUPS WHERE tablegroup_name = 'TBLGROUP1';結果は次のとおりです:
+-----------------+------------+---------------+----------+ | TABLEGROUP_NAME | TABLE_NAME | DATABASE_NAME | SHARDING | +-----------------+------------+---------------+----------+ | TBLGROUP1 | TBL1 | SYS | ADAPTIVE | | TBLGROUP1 | TBL2 | SYS | ADAPTIVE | +-----------------+------------+---------------+----------+ 2 rows in setテーブルグループ内のテーブル
TBL1とTBL2はどちらもパーティションテーブルであり、パーティションタイプ、パーティション数、パーティション値がすべて同じであるため、変更規則に適合し、SHARDING属性の変更は成功しました。
例2:SHARDING = 'NONE' + SCOPE = 'ZONE' のテーブルグループ属性を変更する
SHARDING = 'NONE' + SCOPE = 'ZONE'のテーブルグループtblgroup2を作成します。obclient> CREATE TABLEGROUP tblgroup2 SHARDING = 'NONE', SCOPE = 'ZONE';非パーティションテーブル
test_tbl3を作成し、テーブルグループtblgroup2に追加します。obclient> CREATE TABLE test_tbl3 (col1 NUMBER PRIMARY KEY, col2 VARCHAR2(50)) TABLEGROUP = tblgroup2;パーティションテーブル
test_tbl4を作成し、テーブルグループtblgroup2に追加します。obclient> CREATE TABLE test_tbl4 (col1 NUMBER PRIMARY KEY, col2 VARCHAR2(50)) TABLEGROUP = tblgroup2 PARTITION BY LIST(col1) (PARTITION p0 VALUES('01'), PARTITION p1 VALUES('02') );テーブルグループ
tblgroup2の属性をSHARDING = 'NONE'+SCOPE = 'SERVER'に変更します。obclient> ALTER TABLEGROUP tblgroup2 SCOPE = 'SERVER';テーブルグループのプロパティを確認します。
obclient> SHOW TABLEGROUPS WHERE tablegroup_name = 'TBLGROUP2';結果は次のとおりです。
+-----------------+------------+---------------+----------+--------+ | TABLEGROUP_NAME | TABLE_NAME | DATABASE_NAME | SHARDING | SCOPE | +-----------------+------------+---------------+----------+--------+ | TBLGROUP2 | TEST_TBL3 | TEST_USER001 | NONE | SERVER | | TBLGROUP2 | TEST_TBL4 | TEST_USER001 | NONE | SERVER | +-----------------+------------+---------------+----------+--------+ 2 rows in set