OceanBaseデータベースの動的パーティション管理には、システムパッケージDBMS_PARTITIONが追加され、動的パーティション管理を実行するサブプログラムMANAGE_DYNAMIC_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日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() を直接呼び出すことで、動的パーティション管理タスクを1回トリガーできます:
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