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業務のピーク時間帯を避けることができます。
スケジュールされた動的パーティション管理タスクの確認
ユーザーテナント内で、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', '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