OceanBaseデータベースでは、DYNAMIC_PARTITION_POLICY ブロックを変更することで、テーブルの動的パーティション管理属性を変更できます。
本記事では、SQLステートメントを使用して動的パーティションテーブルを変更する方法について説明します。
制限と注意事項
動的パーティション管理パラメータを変更しても、事前に作成されたパーティションの変更や期限切れパーティションの削除は即時に反映されません。次回の動的パーティション管理タスクが自動的にスケジュールされるか、手動で動的パーティション管理タスクを一度スケジュールする必要があります。動的パーティション管理タスクのスケジュールに関する詳細は、動的パーティション管理タスクを参照してください。
権限要件
動的パーティションテーブルを変更するにはALTER権限が必要です。OceanBaseデータベースの権限に関する詳細は、MySQLモードの権限分類を参照してください。
構文
動的パーティションテーブルを作成するSQLステートメントの形式は以下のとおりです:
ALTER TABLE table_name [SET] DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list);
dynamic_partition_policy_list:
dynamic_partition_policy_option [, dynamic_partition_policy_option ...]
dynamic_partition_policy_option:
ENABLE = {true | false}
| PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
動的パーティション管理プロパティパラメータの説明
プロパティ名 |
説明 |
必須 |
変更は可能か |
|---|---|---|---|
| ENABLE | 動的パーティション管理を有効にするかどうかを示します。値は以下のとおりです:
|
いいえ | はい |
| PRECREATE_TIME | 事前作成時間を示します。動的パーティション管理を1回スケジュールすると、パーティションが事前作成され、最大パーティションの上限 > now() + precreate_time となります。値は以下のとおりです:
説明
|
いいえ | はい |
| EXPIRE_TIME | パーティションの有効期限を示します。動的パーティション管理を1回スケジュールすると、パーティションの上限 < now() - expire_time のすべての期限切れパーティションが削除されます。値は以下のとおりです:
|
いいえ | はい |
テーブル構文の変更に関する詳細なパラメータ説明については、ALTER TABLEを参照してください。
例
テーブル
test_tbl1の動的パーティション情報を確認します。SELECT * FROM oceanbase.DBA_OB_DYNAMIC_PARTITION_TABLES WHERE TABLE_NAME = 'test_tbl1';クエリ結果は次のとおりです:
+---------------+------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+ | DATABASE_NAME | TABLE_NAME | TABLE_ID | MAX_HIGH_BOUND_VAL | ENABLE | TIME_UNIT | PRECREATE_TIME | EXPIRE_TIME | TIME_ZONE | BIGINT_PRECISION | +---------------+------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+ | db_test | test_tbl1 | 511335 | '2025-04-15 13:30:00' | TRUE | HOUR | 3HOUR | 1DAY | +8:00 | NONE | +---------------+------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+ 1 row in set動的パーティションテーブル
test_tbl1を変更し、動的パーティションのプロパティを設定します:- 現在時刻から1日以内のパーティションを事前作成します。
- パーティションは期限切れになりません。
ALTER TABLE test_tbl1 DYNAMIC_PARTITION_POLICY( ENABLE = true, PRECREATE_TIME = '1 day', EXPIRE_TIME = '-1' );再度テーブル
test_tbl1の動的パーティション情報を確認します。SELECT * FROM oceanbase.DBA_OB_DYNAMIC_PARTITION_TABLES WHERE TABLE_NAME = 'test_tbl1';クエリ結果は次のとおりです:
+---------------+------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+ | DATABASE_NAME | TABLE_NAME | TABLE_ID | MAX_HIGH_BOUND_VAL | ENABLE | TIME_UNIT | PRECREATE_TIME | EXPIRE_TIME | TIME_ZONE | BIGINT_PRECISION | +---------------+------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+ | db_test | test_tbl1 | 511335 | '2025-04-15 13:30:00' | TRUE | HOUR | 1DAY | -1 | +8:00 | NONE | +---------------+------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+ 1 row in set説明
動的パーティション管理パラメータを変更しても、事前作成されるパーティションや削除される期限切れパーティションの変更は即時に反映されません。次回の動的パーティション管理タスクが自動的にスケジュールされるか、手動で一度動的パーティション管理タスクをスケジュールする必要があります。詳細については、動的パーティション管理タスクを参照してください。