OceanBaseデータベースの動的パーティション管理には、システムパッケージDBMS_PARTITIONが追加され、動的パーティション管理をトリガーするサブルーチンMANAGE_DYNAMIC_PARTITION()が提供されます。
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2バージョンからシステムパッケージDBMS_PARTITIONがサポートされています。
ダイナミックパーティション管理のスケジュールトリガー
ダイナミックパーティション管理タスクは、PL系システムパッケージDBMS_SCHEDULERに基づいて定期的にトリガーされます。ユーザーテナント作成時に、スケジュールダイナミックパーティション管理タスクSCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLYとSCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILYが組み込まれており、定期的にDBMS_PARTITION.MANAGE_DYNAMIC_PARTITION()を呼び出します。
SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLYは、TIME_UNITがhourのダイナミックパーティション管理をスケジュールし、各整数時に1回実行されます。スケジュール時間は変更できません。SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILYは、TIME_UNITがday、week、month、yearのダイナミックパーティション管理をスケジュールし、毎日1回実行されます。デフォルトでは0時にスケジュールされます。ユーザーはスケジュール時間を変更して、DDL業務のピークタイムを避けることができます。
スケジュールされた動的パーティション管理タスクの確認
ユーザーテナント内で、oceanbase.DBA_SCHEDULER_JOBSビューを使用し、JOB_NAMEをSCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILYまたはSCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLYと指定することで、スケジュールされた動的パーティション管理タスクを確認できます。
例:
JOB_NAMEをSCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILYと指定します。SELECT JOB_NAME, JOB_ACTION, START_DATE, REPEAT_INTERVAL, ENABLED, NEXT_RUN_DATE, MAX_RUN_DURATION, COMMENTS FROM oceanbase.DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY'\G実行結果は次のとおりです:
*************************** 1. row *************************** JOB_NAME: SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY JOB_ACTION: DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(null, 'DAY,WEEK,MONTH,YEAR') START_DATE: 2025-04-16 00:00:00.000000 REPEAT_INTERVAL: FREQ=DAILY;INTERVAL=1 ENABLED: 1 NEXT_RUN_DATE: 2025-04-17 00:00:00.000000 MAX_RUN_DURATION: 3600 COMMENTS: used to perform manage dynamic partition periodically 1 row in setJOB_NAMEをSCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLYと指定します。SELECT JOB_NAME, JOB_ACTION, START_DATE, REPEAT_INTERVAL, ENABLED, NEXT_RUN_DATE, MAX_RUN_DURATION, COMMENTS FROM oceanbase.DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY'\G実行結果は次のとおりです:
*************************** 1. row *************************** JOB_NAME: SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY JOB_ACTION: DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(null, 'HOUR') START_DATE: 2025-04-15 15:00:00.000000 REPEAT_INTERVAL: FREQ=HOURLY;INTERVAL=1 ENABLED: 1 NEXT_RUN_DATE: 2025-04-16 18:00:00.000000 MAX_RUN_DURATION: 3600 COMMENTS: used to perform manage dynamic partition periodically 1 row in set
定時動的パーティション管理タスクの変更
ユーザーテナント内で、現在のテナントに対する定時動的パーティション管理タスクを変更できます。
定時パーティション管理タスクの無効化
CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY');
CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY');
定時パーティション管理タスクの有効化
CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY');
CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY');
定時パーティション管理タスクの日次スケジュール時間の変更
SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY 定時タスクの日次スケジュール時間のみ変更可能です。例えば、現在時刻が 2025-03-11 10:00:00 の場合、スケジュール時間を毎日12時に変更したい場合は以下のようにします:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY', 'START_DATE', '2025-03-11 12:00:00');
次回のスケジュール時間は 2025-03-11 12:00:00 となり、その後毎日12時にスケジュールされます。
ダイナミックパーティション管理の手動トリガー
DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION() を直接呼び出すことで、ダイナミックパーティション管理タスクを一度実行できます。
CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION();
MANAGE_DYNAMIC_PARTITION には precreate_time と time_unit の2つのパラメータがあります。詳細については、MANAGE_DYNAMIC_PARTITIONを参照してください。
precreate_timeを指定した場合、指定値とテーブル上のprecreate_timeのうち大きい方を用いて事前にパーティションを作成します。例:CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION('3DAY');time_unitを指定した場合、テーブルのtime_unitが指定されたtime_unitと一致する場合にのみ、ダイナミックパーティション管理が実行されます。例:CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(NULL, 'day, week');
ダイナミックパーティション管理タスクの履歴実行記録の照会
ビューoceanbase.DBA_OB_TENANT_EVENT_HISTORYには、現在のテナントにおけるダイナミックパーティション管理タスクの履歴実行状況が記録されており、実行成功および失敗したテーブルID情報が含まれます。
SELECT * FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY
WHERE EVENT = 'MANAGE_DYNAMIC_PARTITION';
実行結果は次のとおりです:
+----------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
| TIMESTAMP | MODULE | EVENT | NAME1 | VALUE1 | NAME2 | VALUE2 | NAME3 | VALUE3 | NAME4 | VALUE4 | NAME5 | VALUE5 | NAME6 | VALUE6 | EXTRA_INFO | SVR_IP | SVR_PORT | TRACE_ID | COST_TIME | RET_CODE | ERROR_MSG |
+----------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
| 2025-04-15 16:00:02.292861 | DBMS_PARTITION | MANAGE_DYNAMIC_PARTITION | SUCCESS_TABLE_ID_LIST | [500003] | FAILED_TABLE_ID_LIST | [] | NULL | | NULL | | NULL | | NULL | | NULL | xxx.xx.xxx.xxx | 2882 | YB42AC1E87C3-000632CB941BC66D-0-0 | 2277933 | 0 | NULL |
+----------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
1 rows in set