OceanBaseデータベースでは、DYNAMIC_PARTITION_POLICY ブロックを変更することで、テーブルの動的パーティション管理属性を変更できます。
本記事では、SQLステートメントを使用して動的パーティションテーブルを変更する方法について説明します。
使用上の制限と注意事項
動的パーティション管理パラメータを変更しても、事前作成されたパーティションの変更や期限切れパーティションの削除は即時に反映されません。次回の動的パーティション管理タスクが自動的にスケジュールされるか、手動で一度動的パーティション管理タスクをスケジュールする必要があります。動的パーティション管理タスクのスケジュールに関する詳細は、動的パーティション管理タスクを参照してください。
権限要件
動的パーティションテーブルを変更するには ALTER 権限が必要です。OceanBaseデータベースの権限に関する詳細は、Oracleモードの権限分類を参照してください。
構文
動的パーティションテーブルを作成する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 sys.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 | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ | SYS | TEST_TBL1 | 507940 | Timestamp '2024-11-11 13:30:00.000000' | 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 sys.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 | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ | SYS | TEST_TBL1 | 507940 | Timestamp '2024-11-11 13:30:00.000000' | TRUE | HOUR | 1DAY | -1 | +8:00 | NONE | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ 1 row in set説明
動的パーティション管理パラメータを変更しても、事前作成されるパーティションや削除される期限切れパーティションの変更は即時には反映されません。次回の動的パーティション管理タスクが自動的にスケジュールされるか、手動で動的パーティション管理タスクを1回スケジュールする必要があります。詳細については、動的パーティション管理タスクを参照してください。