テーブルをテーブルグループに追加した後、パーティションの管理(例えば、パーティションタイプの変更、パーティション数の変更、パーティション値の変更、パーティションの追加、パーティションの削除など)、テーブルのグループからの移動、他のテーブルグループへの移行などの操作が可能になります。
テーブルのパーティション管理
テーブルパーティション変更時の注意点
テーブルパーティションを変更する際、テナントのパーティション自動再バランシング機能を使用する必要がある場合は、テナント内のロードバランシングを有効にし、パーティションロードバランシングタスクの生成時間間隔を設定する必要があります。テナントのパーティション自動再バランシングは、以下の2つの構成パラメータで制御されます:
テナントレベルの構成パラメータ
enable_rebalanceこの構成パラメータは、システムテナントではテナント間のロードバランシングを行うかどうかを制御し、ユーザーテナントではテナント内の再バランシングを行うかどうかを制御します。デフォルト値は
trueで、構成パラメータの変更は即時に反映されます。システムテナントの
enable_rebalanceの値:true:テナント間のロードバランシングを有効にすることを示します。false:テナント間のロードバランシングを無効にすることを示します。
ユーザーテナントの
enable_rebalanceの値:true:テナント内のロードバランシングを有効にすることを示します。テーブルパーティションを変更する前に、テナント内のロードバランシングを有効にすることを推奨します。false:テナント内のロードバランシングを無効にすることを示します。
テナントレベルの構成パラメータ
PARTITION_BALANCE_SCHEDULE_INTERVALこの構成パラメータは、パーティションロードバランシングタスクの生成時間間隔を制御します。
enable_rebalanceの値がtrueの場合、システムはpartition_balance_schedule_intervalを時間間隔としてパーティションロードバランシングタスクを自動的にトリガーします。デフォルト値は2hで、値の範囲は [0s, +∞) です。0sはパーティション再バランシングを無効にすることを示し、構成パラメータの変更は即時に反映されます。
2つの構成パラメータの設定方法は以下のとおりです:
管理者ユーザーでクラスタの
sysテナントまたはユーザーテナントにログインします。テナント内のロードバランシングを有効にします。
システムテナントで指定したテナントのテナント内ロードバランシングを有効にする
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';このステートメントは、ユーザーテナントの構成パラメータ
enable_rebalanceの値をtrueに設定します。例:
ALTER SYSTEM SET enable_rebalance = true TENANT = 'oracle';システムテナントですべてのユーザーテナントのテナント内ロードバランシングを有効にする
ALTER SYSTEM SET enable_rebalance = true TENANT = all_user;または
ALTER SYSTEM SET enable_rebalance = true TENANT = all;このステートメントは、ユーザーテナントの構成パラメータ
enable_rebalanceの値がすべてtrueであることを示します。説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allは同じ意味を持ちます。すべてのユーザーテナントに適用範囲を広げる必要がある場合は、TENANT = all_userの使用を推奨します。今後TENANT = allは廃止され、使用されなくなります。ユーザーテナントで自身のテナントのテナント内ロードバランシングを有効にする
Oracleテナントで自身のテナントのテナント内ロードバランシングを有効にするステートメントは以下のとおりです:
ALTER SYSTEM SET enable_rebalance = 'true';
パーティションロードバランシングタスクの生成時間間隔を設定します。
システムテナント
ALTER SYSTEM SET partition_balance_schedule_interval='2h' TENANT = 'tenant_name';例:
ALTER SYSTEM SET partition_balance_schedule_interval='2h' TENANT = 'oracle';ユーザーテナント
ALTER SYSTEM SET partition_balance_schedule_interval='2h';
テーブルパーティションの変更ルール
テーブルグループ内のテーブルに対してパーティション管理操作を行う前に、ビューを通じて現在のテーブルが属するテーブルグループの SHARDING プロパティ、テーブルグループ内に存在するテーブル、およびテーブルグループ内のテーブルのパーティション情報を確認できます。詳細な操作については、テーブルグループ情報の表示を参照してください。
次に、クエリ結果に基づいて、テーブルグループ内に現在のテーブルのみがある場合は、制限なくパーティション管理操作を正常に実行できます。テーブルグループ内に現在のテーブル以外に他のテーブルがある場合は、以下の変更ルールに従う必要があります:
そのテーブルが属するテーブルグループの
SHARDINGプロパティがNONEの場合:そのテーブルがパーティションテーブルでない場合、パーティションテーブルではないテーブルをパーティションテーブルまたはコンポジット・パーティションテーブルに変更することが許可されます。
そのテーブルがパーティションテーブルの場合、パーティションテーブルをコンポジット・パーティションテーブルに変更したり、コンポジット・パーティションテーブルをパーティションテーブルに変更したりすることが許可されます。また、パーティションの追加や削除も可能です。つまり、パーティションタイプ、パーティション数、パーティション値の変更に制限はありません。
そのテーブルが属するテーブルグループの
SHARDINGプロパティがPARTITIONの場合:そのテーブルがパーティションテーブルでない場合、パーティションテーブルではないテーブルをパーティションテーブルに変更することは許可されません。
そのテーブルがパーティションテーブルの場合、それをパーティションテーブルではないテーブルに変更することは許可されません。
そのテーブルがパーティションテーブルの場合、それをコンポジット・パーティションテーブルに変更することが許可されます。また、コンポジット・パーティションテーブル内のパーティションに対応するパーティションタイプ、パーティション数、パーティション値は、テーブルグループ内の他のテーブルと一致させる必要があります。コンポジット・パーティションテーブルのパーティションタイプ、パーティション数、パーティション値の定義に制限はありません。パーティション数を変更するには、パーティションの追加または削除操作を使用します。他の方法でパーティションのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
そのテーブルがコンポジット・パーティションテーブルの場合、それをパーティションテーブルに変更することが許可されます。また、パーティションに対応するパーティションタイプ、パーティション数、パーティション値は、テーブルグループ内の他のテーブルの値と一致させる必要があります。パーティション数を変更するには、パーティションの追加または削除操作を使用します。他の方法でパーティションのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
パーティションの追加または削除操作を実行したテーブルグループについては、システムはロードバランシングを行いません。テーブルグループ内のすべてのテーブルのパーティションタイプ、パーティション数、パーティション値などが
PARTITIONのプロパティ要件を満たしている場合にのみ、ロードバランシングが実行されます。
そのテーブルが属するテーブルグループの
SHARDINGプロパティがADAPTIVEの場合:そのテーブルがパーティションテーブルでない場合、パーティションテーブルではないテーブルをパーティションテーブルに変更することは許可されません。
そのテーブルがパーティションテーブルの場合、それをパーティションテーブルではないテーブルに変更することは許可されません。
そのテーブルが属するテーブルグループ内にパーティションテーブルがない場合、そのテーブルをパーティションテーブルではないテーブルまたはコンポジット・パーティションテーブルに変更することは許可されません。同時に、パーティションの追加または削除操作を使用してパーティション数を変更することは許可されますが、他の方法でテーブルのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
そのテーブルが属するテーブルグループ内にコンポジット・パーティションテーブルしかない場合、そのテーブルをパーティションテーブルに変更することは許可されません。同時に、パーティションの追加または削除、コンポジット・パーティションの追加または削除操作を使用してパーティション数を変更することは許可されますが、他の方法でテーブルのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
パーティションの追加または削除、コンポジット・パーティションの追加または削除操作を実行したテーブルグループについては、システムはロードバランシングを行いません。テーブルグループ内のすべてのテーブルのパーティションタイプ、パーティション数、パーティション値などが
ADAPTIVEのプロパティ要件を満たしている場合にのみ、ロードバランシングが実行されます。
テーブルのパーティションの変更
現在のテーブルの実際の状況と変更ルールを組み合わせて、以下の内容を参考にして、テーブルのパーティションを変更します。
テーブルをテーブルグループから削除する
テーブルをテーブルグループに追加した後、そのテーブルをグループから削除することができます。SQL文は以下のとおりです。
ALTER TABLE table_name SET TABLEGROUP '';
以下の簡単な例で説明します。
テーブルグループ
TBLGROUP1があり、そのグループにはTBL1とTBL2の2つのテーブルが含まれているとします。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をテーブルグループから削除します。ALTER TABLE tbl1 SET TABLEGROUP '';再度、テーブルグループ内のテーブルを確認します。
SHOW TABLEGROUPS WHERE tablegroup_name = 'TBLGROUP1';クエリ結果:
+-----------------+------------+---------------+----------+ | TABLEGROUP_NAME | TABLE_NAME | DATABASE_NAME | SHARDING | +-----------------+------------+---------------+----------+ | TBLGROUP1 | TBL2 | SYS | ADAPTIVE | +-----------------+------------+---------------+----------+ 1 row in set
テーブルを他のテーブルグループに移行する
テーブルをテーブルグループに追加した後、そのテーブルを他の条件を満たすテーブルグループに移行できます。
テーブルを他のテーブルグループに移行する際は、移行先のテーブルグループのプロパティとグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作方法については、テーブルグループ情報の表示を参照してください。
テーブルグループのSHARDINGプロパティに基づいて:
SHARDINGプロパティがNONEのテーブルグループでは、移行対象のテーブルに制限はなく、直接そのテーブルグループに移行できます。SHARDINGプロパティがPARTITIONのテーブルグループでは、移行対象のテーブルの対応するパーティションは、テーブルグループ内のすべてのテーブルのパーティション定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。テーブルグループ内には、パーティションテーブルとコンポジット・パーティションテーブルの両方を同時に持つことができます。同じパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること。例えば、どちらもRangeパーティションである場合。
- Hashパーティションの場合、参照する列数とパーティション数が同じであること。
- Rangeパーティションの場合、参照する列数とパーティション数が同じであり、Range分割ポイントも同じであること。
SHARDINGプロパティがADAPTIVEのテーブルグループでは、移行対象のテーブルの対応するパーティションとコンポジット・パーティションは、テーブルグループ内のすべてのテーブルのパーティションとコンポジット・パーティションのパーティション定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。テーブルグループ内のテーブルは、すべてパーティションテーブルまたはすべてコンポジット・パーティションテーブルである必要があります。同じパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること(例えば、どちらもHash + Rangeパーティションである場合)。
- Hashパーティションの場合、参照する列数とパーティション数が同じであること。
- Rangeパーティションの場合、参照する列数とパーティション数が同じであり、Range分割ポイントも同じであること。
- コンポジット・パーティションの場合、そのパーティションタイプに基づいて、パーティションと同じ要件が適用されます。
テーブルを他のテーブルグループに移行するSQLステートメントは以下のとおりです。
ALTER TABLE table_name SET TABLEGROUP tablegroup_name;
テーブルtbl1をテーブルグループtblgroup2に移行する例は以下のとおりです:
ALTER TABLE tbl1 SET TABLEGROUP tblgroup2;