テーブルグループを作成した後、ビジネスの変化に応じて、その属性を変更することができます。
使用上の制限
- OceanBaseデータベースのアップグレード中は、テーブルグループ属性の変更を禁止します。
- このステートメントを実行するには、現在のユーザーがグローバルな
ALTER権限を持っている必要があります。
変更ルール
テーブルグループの属性を変更する際には、まずテーブルグループ内にテーブルが存在するかどうか、およびテーブルのパーティション情報を確認する必要があります。テーブルグループ内のテーブルの具体的な操作については、テーブルグループ情報の確認を参照してください。
テーブルグループ内にテーブルがない場合は、
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プロパティに依存します。- パーティションテーブルの場合:各パーティションが独立したパーティショングループとなります。
- サブパーティションテーブルの場合:各サブパーティションが独立したパーティショングループとなります。
- 非パーティションテーブルの場合:テーブル全体が1つのパーティショングループとなります。
- グローバルインデックス:非パーティションテーブルは1つのパーティションと見なされ、各パーティションが1つのパーティショングループとなります。
PARTITION:テーブルグループ全体が1つのバランスグループ(Balance Group)となり、同一のパーティションインデックスを持つパーティションが同一のパーティショングループに集約されます。テーブルグループに追加されるすべてのテーブルの対応するパーティションは、テーブルグループ内のすべてのテーブルのパーティションとパーティション定義が一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。同一のパーティション定義とは具体的には以下のことを指します:- パーティションタイプが同じであること。例えば、どちらもRangeパーティションであること。
- Hashパーティションの場合、参照する列数とパーティション数が同じであること。
- Rangeパーティションの場合、参照する列数、パーティション数、Rangeの分割ポイントがすべて同じであること。
ADAPTIVE:デフォルト値です。テーブルグループに追加されるすべてのテーブルの対応するパーティションとサブパーティションは、テーブルグループ内のすべてのテーブルのパーティションとサブパーティションの定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。- 全てがパーティションテーブルの場合:テーブルグループ全体が1つのバランスグループとなり、同一のパーティションインデックスを持つパーティションが同一のパーティショングループに集約されます。
- 全てがサブパーティションテーブルの場合:同一のパーティションインデックスを持つものが1つのバランスグループとなり、そのバランスグループ内で同一のサブパーティションインデックスを持つサブパーティションが同一のパーティショングループに集約されます。
同一のパーティション定義とは具体的には以下のことを指します:
- パーティションタイプが同じであること。例えば、どちらもHash + Rangeパーティションであること。
- Hashパーティションの場合、参照する列数とパーティション数が同じであること。
- Rangeパーティションの場合、参照する列数、パーティション数、Rangeの分割ポイントがすべて同じであること。
- サブパーティションの場合、そのパーティションタイプに基づき、パーティションと同じ要件が適用されます。
scope_option:オプションです。テーブルグループのSCOPEプロパティを変更するために使用します。SCOPEは、テーブルグループ内のすべての集約されたパーティショングループの分散範囲を決定します。取り得る値は以下のとおりです:SERVER:すべてのパーティショングループのリーダーが同一ノード上に集約されることを示します。ZONE:すべてのパーティショングループのリーダーが同一ゾーン内に分散され、ゾーン内の各ノードに配置されることを示します。CLUSTER:すべてのパーティショングループのリーダーがクラスタ内の各ノードに分散されることを示します。
説明
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 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup1 PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup1 PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );テーブルグループ
tblgroup1のSHARDING属性をADAPTIVEに変更します。ALTER TABLEGROUP tblgroup1 SHARDING = "ADAPTIVE";テーブルグループ属性を確認します。
SHOW TABLEGROUPS WHERE tablegroup_name = 'tblgroup1';結果は次のとおりです:
+-----------------+------------+---------------+----------+ | Tablegroup_name | Table_name | Database_name | Sharding | +-----------------+------------+---------------+----------+ | tblgroup1 | tbl1 | test | ADAPTIVE | | tblgroup1 | tbl2 | test | 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 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup2;パーティションテーブル
test_tbl4を作成し、テーブルグループtblgroup2に追加します。obclient> CREATE TABLE test_tbl4 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup2 PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );テーブルグループ
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_db | NONE | SERVER | | tblgroup2 | test_tbl4 | test_db | NONE | SERVER | +-----------------+------------+---------------+----------+--------+ 2 rows in set