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回実行されます。デフォルトでは午前0時に実行されます。ユーザーはスケジュール時間を変更し、DDL業務のピーク時間帯を避けることができます。
定期的な動的パーティション管理タスクの確認
ユーザーテナント内で、sys.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 sys.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 sys.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', TIMESTAMP '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');
動的パーティション管理タスクの履歴実行レコードのクエリ
ビュー DBA_OB_TENANT_EVENT_HISTORY は、現在のテナント配下での動的パーティション管理タスクの履歴実行状況を記録しており、実行成功および失敗したテーブルID情報が含まれます:
SELECT * FROM sys.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 |
+------------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
| 15-APR-25 04.00.04.528017 PM | DBMS_PARTITION | MANAGE_DYNAMIC_PARTITION | SUCCESS_TABLE_ID_LIST | [500004] | FAILED_TABLE_ID_LIST | [] | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | xxx.xx.xxx.xxx | 2882 | YB42AC1E87C3-000632CB999BC733-0-0 | 4505353 | 0 | NULL |
+------------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
1 rows in set